Python 请求 API 调用不起作用

Posted

技术标签:

【中文标题】Python 请求 API 调用不起作用【英文标题】:Python Requests API call not working 【发布时间】:2016-08-22 04:21:04 【问题描述】:

我在将工作 cURL 调用转换为内部 API 转换为 python 请求调用时遇到问题。

这是有效的 cURL 调用:

curl -k -H 'Authorization:Token token=12345' 'https://server.domain.com/api?query=query'

然后我尝试在此处将该调用转换为可工作的 python 请求脚本:

#!/usr/bin/env python
import requests

url = 'https://server.domain.com/api?query=query'
headers = 'Authorization': 'Token token=12345'

r = requests.get(url, headers=headers, verify=False)

print r

我收到 HTTP 401 或 500 错误,具体取决于我如何更改 headers 变量。我不明白我的 python 请求与 cURL 请求有何不同。它们都作为同一用户从同一服务器运行。

任何帮助将不胜感激

【问题讨论】:

python request with authentication (access_token)的可能重复 【参考方案1】:

如果不知道你的 api 就很难说,但你可能有一个 curl 尊重请求的重定向(或者至少没有在重定向时发送标头)。

尝试使用会话对象来确保所有请求(和重定向)都有您的标头。

#!/usr/bin/env python
import requests

url = 'https://server.domain.com/api?query=query'
headers = 'Authorization': 'Token token=12345'

#start a session
s = requests.Session()

#add headers to session
s.headers.update(headers)

#use session to perform a GET request. 
r = s.get(url)

print r

【讨论】:

当我尝试您的脚本时,我收到一个 HTTP 500 内部服务错误返回。 <Response [500]>我跟踪了API服务器的apache ssl访问日志,确认有500响应。【参考方案2】:

我想通了,原来我必须指定“接受”标头值,工作脚本如下所示:

#!/usr/bin/env python
import requests

url = 'https://server.domain.com/api?query=query'
headers = 'Accept': 'application/app.app.v2+json', 'Authorization': 'Token token=12345'

r = requests.get(url, headers=headers, verify=False)

print r.json()

【讨论】:

以上是关于Python 请求 API 调用不起作用的主要内容,如果未能解决你的问题,请参考以下文章

异步 Web 请求在 WCF 中不起作用

gmail API 中的观看请求不起作用

Jersey REST API 请求不起作用

使用代理请求不起作用

使用代理请求不起作用

跨域 AJAX 请求不起作用