python-requests - 如何使用 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")
你能指出我哪里做错了吗?谢谢!
解决方案
所以经过一番尝试,我发现我需要使用http.request而不是http.open。我还需要在方法中执行“headers=headers”,而不仅仅是“headers”。
qt_time_obj = http.request('GET', url, headers=headers)
推荐阅读
- opencv - 如果我知道左、右、上、下坐标,有没有办法以厘米为单位确定矩形的高度?
- c++ - 为什么这些交叉引用的类在拆分为不同的文件时不会编译?
- c - C中有缺陷的二分搜索
- python - 无法访问 Lambda 中 GhostScript 生成的文件
- webcam - Hololens 模拟器中的网络摄像头支持
- mysql - SpringMvc + Cloud SQL (MySQL) 集成
- rust - rustc -L 命令找不到板条箱
- vhdl - 这些代码有什么区别吗?
- c++ - 初始化多通道 OpenCV Mat
- laravel - 如何将 v-model 传递给另一个 v-model