我的代码是从单点登录功能,我给它一个字符串,而不是字节python 3打印字符串,并说字符串的类型是str?
from urllib.parse import unquote
import base64
payload = unquote(payload)
print(payload)
print(type(payload))
decoded = base64.decodestring(payload)
decodestring抱怨......
File "/Users/Jeff/Development/langalang/proj/discourse/views.py", line 38, in sso decoded = base64.decodestring(payload) File "/Users/Jeff/.virtualenvs/proj/lib/python3.6/base64.py", line 559, in decodestring return decodebytes(s) File "/Users/Jeff/.virtualenvs/proj/lib/python3.6/base64.py", line 551, in decodebytes _input_type_check(s) File "/Users/Jeff/.virtualenvs/proj/lib/python3.6/base64.py", line 520, in _input_type_check raise TypeError(msg) from err TypeError: expected bytes-like object, not str
这是罚款,但当我看看我的打印报表打印到终端上,我看到这...
b'bm9uY2U9NDI5NDg5OTU0NjU4MjAzODkyNTI=\n'
<class 'str'>
它似乎是说它是一串字节,但它表示它是一个字符串。
这是怎么回事?
如果我添加一个encode()
有效载荷声明我看到这个月底...
payload = unquote(payload).encode()
b"b'bm9uY2U9NDQxMTQ4MzIyNDMwNjU3MjcyMDM=\\n'"
<class 'bytes'>
编辑:添加,使有效载荷的方法
@patch("discourse.views.HttpResponseRedirect")
def test_sso_success(self, mock_redirect):
"""Test for the sso view"""
# Generating a random number, encoding for url, signing it with a hash
nonce = "".join([str(random.randint(0, 9)) for i in range(20)])
# The sso payload needs to be a dict of params
params = {"nonce": nonce}
payload = base64.encodestring(urlencode(params).encode())
print(payload.decode() + " tests")
key = settings.SSO_SECRET
h = hmac.new(key.encode(), payload, digestmod=hashlib.sha256)
signature = h.hexdigest()
url = reverse("discourse:sso") + "?sso=%s&sig=%s" % (payload, signature)
req = self.rf.get(url)
req.user = self.user
response = sso(req)
self.assertTrue(mock_redirect.called)
确切地说'有效载荷'是由_originally_定义的? –
什么是“有效载荷”?你怎么得到的?创建简单的工作示例。 – furas
@leaf有效载荷创建功能添加到帖子。它是在django unittest中创建的 – deltaskelta