python - 将 curl 命令转换为 Python 请求

标签 python python-requests

我拥有的可以正常工作的 curl 命令是 -

curl -X GET -H "Authorization: Basic <base64userpass>" -H "Content-Type: application/json" "http://<host>/bamboo/rest/api/latest/result/<plankey>.json?expand=results.result&os_authType=basic"

在 Python 中,这就是我目前拥有的 -

   headers = {'Authorization': 'Basic <base64userpass>', 'Content-Type': 'application/json'}
   datapoints = {'expand': 'results.result', 'os_authType': 'basic'}
   url = "http://<host>/bamboo/rest/api/latest/result/<plankey>.json"
   r = requests.get(url, headers=headers, data=datapoints)

我在使用 Python 请求时得到的响应是 <Response [403]> ,但是当使用 curl 时,我得到了预期的数据。

我在这里错过了什么?

谢谢。

最佳答案

您应该使用请求的auth 选项来进行基本身份验证。 CURL 命令行为您处理了更多 header (除非您使用 auth,否则请求不会处理它们):

>>> from requests.auth import HTTPBasicAuth
>>> requests.get('https://api.github.com/user', auth=HTTPBasicAuth('user', 'pass'))

或者只是使用:

>>> requests.get('https://api.github.com/user', auth=('user', 'pass'))

(更改 URL 和所有内容)。

另请注意,requests 应该获取 params=(而不是 data=)。

关于python - 将 curl 命令转换为 Python 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40986114/

相关文章:

python - 为什么 pip 因包的 md5 哈希错误而失败?

python-3.x - python3请求使用quote而不是quote_plus

python - 如何在没有 url_for ('static' , file_name ='xxx' 的情况下在 Flask 中获取静态文件)

python:为什么 list.append ('a' ) 效果列表?

python - sqlalchemy on_duplicate_key_update

python - 在 Python 3.3 中使用 requests 和 requests-oauthlib 验证 API 调用

python - 请求模块和压缩

Python 以 javascript 形式登录网站

amazon-web-services - AWS Glue 中的 Python 请求库

python - Key.from_path 是否命中数据存储?