"TypeError: a bytes-like object is required, not 'str'" during OAuth 2.0 callback request
"TypeError: a bytes-like object is required, not 'str'" during OAuth 2.0 callback request
我对 Python 3 和 Flask 还很陌生,我目前正在构建一个简单的 Web 应用程序来使用来自 Spotify API 的数据。
OAuth 2.0 身份验证流程几乎可以正常工作,因为我可以调用 https://accounts.spotify.com/authorize and https://accounts.spotify.com/api/token.
有时我需要请求新的访问和刷新令牌:
authentication_token = request.args['code']
code_payload = {
"grant_type": "authorization_code",
"code": str(authentication_token),
"redirect_uri": REDIRECT_URI
}
encoded_oauth2_tokens = base64.b64encode('{}:{}'.format(CLIENT_ID, CLIENT_SECRET))
headers = {"Authorization": "Basic {}".format(encoded_oauth2_tokens)}
post_request = requests.post(SPOTIFY_TOKEN_URL, data=code_payload, headers=headers)
回调请求函数失败,出现以下错误:
File "app.py", line 52, in callback
encoded_oauth2_tokens = base64.b64encode('{}:{}'.format(CLIENT_ID, CLIENT_SECRET))
File "/usr/lib/python3.6/base64.py", line 58, in b64encode
encoded = binascii.b2a_base64(s, newline=False)
TypeError: a bytes-like object is required, not 'str'
我知道一个字符串正在传递给 b64encode()
,但我不确定如何将它更改为二进制(?)。
在我的研究中,大多数类似的错误都与打开文件有关,这不是我的情况。
因为python3字符串是unicode,所以在传递给字节级操作的东西(例如base64编码)之前需要对其进行编码:
base64.b64encode('{}:{}'.format(CLIENT_ID, CLIENT_SECRET).encode())
默认编码为UTF-8,对于OAuth应该足够了。 encode 方法接受一个参数来指定应用程序需要使用的编码:"foo".encode("latin-1")
我对 Python 3 和 Flask 还很陌生,我目前正在构建一个简单的 Web 应用程序来使用来自 Spotify API 的数据。
OAuth 2.0 身份验证流程几乎可以正常工作,因为我可以调用 https://accounts.spotify.com/authorize and https://accounts.spotify.com/api/token.
有时我需要请求新的访问和刷新令牌:
authentication_token = request.args['code']
code_payload = {
"grant_type": "authorization_code",
"code": str(authentication_token),
"redirect_uri": REDIRECT_URI
}
encoded_oauth2_tokens = base64.b64encode('{}:{}'.format(CLIENT_ID, CLIENT_SECRET))
headers = {"Authorization": "Basic {}".format(encoded_oauth2_tokens)}
post_request = requests.post(SPOTIFY_TOKEN_URL, data=code_payload, headers=headers)
回调请求函数失败,出现以下错误:
File "app.py", line 52, in callback
encoded_oauth2_tokens = base64.b64encode('{}:{}'.format(CLIENT_ID, CLIENT_SECRET))
File "/usr/lib/python3.6/base64.py", line 58, in b64encode
encoded = binascii.b2a_base64(s, newline=False)
TypeError: a bytes-like object is required, not 'str'
我知道一个字符串正在传递给 b64encode()
,但我不确定如何将它更改为二进制(?)。
在我的研究中,大多数类似的错误都与打开文件有关,这不是我的情况。
因为python3字符串是unicode,所以在传递给字节级操作的东西(例如base64编码)之前需要对其进行编码:
base64.b64encode('{}:{}'.format(CLIENT_ID, CLIENT_SECRET).encode())
默认编码为UTF-8,对于OAuth应该足够了。 encode 方法接受一个参数来指定应用程序需要使用的编码:"foo".encode("latin-1")