等效于curl命令的python,具有api令牌基本身份验证

时间:2019-06-18 01:13:02

标签: python http curl python-requests

我正在研究helpshift api,并试图找到一个准确的请求调用,该请求将返回问题Issue元数据。我已经尝试了许多示例,但它始终返回401状态。

但是我能够使curl命令起作用

提供给我的是:apikey,url,返回的是json响应

有效的CURL命令是:

curl -X GET --header 'Accept: application/json' --header 'Authorization: Basic <base64_encoded_version_of_api_key_for_basic_auth>' '<helpshift_url>'

我尝试过的事情如下:

>>> api_key = "ABCDEFGH"
>>> issue = '<helpshift_url>'
>>> 
>>> r = requests.get( issue, auth = ( api,"" ))
>>> r.status_code
401
>>> 
>>> import base64
>>> api_new = base64.b64encode(api_key.encode("UTF-8"))
>>> 
>>> r = requests.get( issue, auth = ( api_new,"" ))
>>> r.status_code
401

我想得到的是打印出JSON响应

2 个答案:

答案 0 :(得分:0)

requests auth param负责HTTP基本身份验证。从我在您的代码中看到的,您想要修改标头而不是执行auth。

这是通过将标头字典headers = {'Authorization': api_new}作为请求r = requests.get( issue, headers=headers)传递给请求来完成的。

完整代码

import base64
import requests

api_key = "ABCDEFGH"
issue = '<helpshift_url>'

api_new = base64.b64encode(api_key.encode("UTF-8"))
headers = {'Authorization': api_new}

r = requests.get( issue, headers=headers)


答案 1 :(得分:0)

您需要使用标题:

>>> import base64
>>> api_new = base64.b64encode(api_key.encode("UTF-8"))
>>> 
>>> r = requests.get( issue, header="Authorization: Basic {}'.format(api_new))