当前位置: 首页 > 知识库问答 >
问题:

Python请求API调用不工作

慕冠宇
2023-03-14

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

以下是工作旋度调用:

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请求有何不同。它们都作为同一用户从同一台服务器上运行。

任何帮助都将不胜感激

共有2个答案

袁阿苏
2023-03-14

我想通了,原来我必须指定“接受”标头值,工作脚本看起来像这样:

#!/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()
东方旭东
2023-03-14

在不了解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
 类似资料:
  • 我目前正在努力从API获取一些数据,但在一些请求中遇到了问题。 当前调用和其他一些类似的调用似乎不起作用,而其他调用则起作用(除了这些调用不使用“payload”参数)。我在文档中使用了相同的示例,因此不确定这些示例为什么不起作用。 回报 有人有主意吗?谢谢。

  • 我试图编写这段代码,通过一个api从openweathermap.org请求这些信息,并尝试打印当前时间的温度和位置。 大部分代码都是我在互联网上找到的一些技巧的混合。 现在我得到了这个错误,我被卡住了。有人能帮助我再次走上正确的道路吗? 这是我的密码: 所以url是这样的:http://api.openweathermap.org/data/2.5/weather?zip=3032,nl 我得到

  • 问题内容: 我正在尝试使用Elastic Search引擎在mongodb数据库上进行全文搜索,但是遇到一个问题:无论我提供什么搜索字词(或者如果我使用query1或query2),引擎始终会返回相同的结果。我认为问题出在我提出请求的方式上,但我不知道如何解决。 这是代码: 问题答案: 该参数不适用于正在发送的数据。如果要尝试将数据发送到服务器,则应特别使用data参数。如果您尝试发送查询参数,则

  • 我试图使用cURL获取一个HTTP请求响应,这很好。然而,当我在Python中使用“请求”包时,我没有得到任何响应(它只是超时,没有错误或返回响应)。 我的cURL代码如下: 当我在cURL代码中使用-v时,我得到以下消息: 试图144.126.138.12... TCP_NODELAY集 连接到144.126.138.12(144.126.138.12)端口17001(#0) POST/api/

  • 问题内容: 我有一个RESTful API,我已在EC2实例上使用Elasticsearch的实现公开了索引内容的语料库。我可以通过从终端机(MacOSX)运行以下命令来查询搜索: 如何使用或(不确定要使用哪个请求- 一直在使用urllib2,但听说请求更好…)将以上转换为API请求?我是否可以通过标题? 问题答案: 使用请求: 然后,根据您的API返回的响应类型,您可能需要查看或(或可能先检查)

  • 我有一个RESTful API,我在EC2实例上使用Elasticsearch实现来索引内容语料库。我可以通过从我的终端(MacOSX)运行以下命令来查询搜索: 我如何使用python/requests或python/urllib2将上述内容转换为API请求(不确定应该选择哪一个-一直在使用urllib2,但听说请求更好?我是作为标题传递还是以其他方式传递?