类型关于在 Python 中不需要'bytes' 'str'的错误



我试图使用Backblaze B2 API来最终迭代我在那里的一些.ai文件,但Backblaze在其文档中提供的代码给了我一个错误。

下面是代码

import base64
import json
import urllib3
id_and_key = 'applicationKeyId_value:applicationKey_value'
basic_auth_string = 'Basic ' + base64.b64encode(id_and_key)
headers = { 'Authorization': basic_auth_string }
request = urllib3.Request(
'https://api.backblazeb2.com/b2api/v2/b2_authorize_account',
headers = headers
)
response = urllib3.urlopen(request)
response_data = json.loads(response.read())
response.close()

当我运行代码时(用我的主密钥ID替换id_and_key,看起来像'6b5*********'),我得到了一个错误,看起来像这样

Traceback (most recent call last):
File "/Users/jacobpatty/vscode_projects/badger_colors/backblaze_test.py", line 6, in <module>
basic_auth_string = base64.b64encode(id_and_key)
File "/opt/homebrew/Cellar/python@3.9/3.9.12/Frameworks/Python.framework/Versions/3.9/lib/python3.9/base64.py", line 58, in b64encode
encoded = binascii.b2a_base64(s, newline=False)
TypeError: a bytes-like object is required, not 'str'

我看了看base64文档,但是我找不到任何有用的信息。或者它可能与urllib3有关?有人知道为什么我得到这个错误,或者如何修复它吗?

也许-令人困惑的是,您需要将.encode()输入到.b64encode()!

>>> import base64
>>> base64.b64encode("my input")
[clipped]
TypeError: a bytes-like object is required, not 'str'
>>> base64.b64encode("my input".encode())
b'bXkgaW5wdXQ='

特别是对于您的认证头,您可以一次完成所有这些操作,而不必担心中间名称

request = urllib3.Request(
'https://api.backblazeb2.com/b2api/v2/b2_authorize_account',
headers={
"Authorization": f"Basic {base64.b64encode((f'{app_id}:{app_key}').encode()).decode()}"
}
)

相关内容

最新更新