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 调用不起作用的主要内容,如果未能解决你的问题,请参考以下文章