首页 > 解决方案 > 如何使用 Python3.6.9 urllib3 发送基本授权标头

问题描述

我正在尝试发送 API 调用以从 Questrade 平台获取时间。这是他们指南的示例请求

GET /v1/time HTTP/1.1
Host: https://api01.iq.questrade.com
Authorization: Bearer C3lTUKuNQrAAmSD/TPjuV/HI7aNrAwDp

我能够让它与请求模块一起工作

headers = {'Authorization': f'{token_type} {access_token}'}
print(headers) -> {'Authorization': 'Bearer -xSoUNCLYCrFjxxxxx_wAQVpi4olWrQs0'}
qt_time_obj = requests.get(api_server + 'v1/time', headers=headers)
qt_time = qt_time_obj.json()['time']
print(qt_time) -> 2020-10-13T17:06:32.388000-04:00

现在我正试图让 urllib3 工作但没有运气

headers = {'Authorization': f'{token_type} {access_token}'}
url = api_server + 'v1/time'
http = urllib3.PoolManager()
qt_time_obj = http.urlopen('GET', url, headers)

print(qt_time_obj.status) -> 401
print(qt_time_obj.data) -> b'{"code":1014,"message":"Missing authorization header"}'

我也尝试了 make_headers 方法,但它给了我同样的错误。

headers = urllib3.make_headers(basic_auth="Authorization: Bearer AdKt3YUl46_tGnZp7cRgTu4W2vtfBME50")

你能指出我哪里做错了吗?谢谢!

标签: python-requestspython-3.8urllib3

解决方案


所以经过一番尝试,我发现我需要使用http.request而不是http.open。我还需要在方法中执行“headers=headers”,而不仅仅是“headers”。

qt_time_obj = http.request('GET', url, headers=headers)

推荐阅读