Python请求API调用不起作用

时间:2016-04-27 17:41:02

标签: python api curl token

我在将工作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错误,具体取决于我如何更改标头变量。我不明白的是我的python请求与cURL请求有什么不同。它们都是从同一个服务器运行,作为同一个用户运行。

任何帮助将不胜感激

2 个答案:

答案 0 :(得分:1)

很难说不知道你的api,但你可能有一个重定向,卷曲是为了表示请求不是(或者至少不会在重定向上发送标题)。

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

#!/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

答案 1 :(得分:0)

我弄清楚了,事实证明我必须指定“accept”标头值,工作脚本如下所示:

#!/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()