将此curl转换为Python请求



我希望有人能帮助我使用Python请求库将这个curl请求翻译成语法。这个API应该给我提供一个票的列表。我不熟悉用Python中的头和API键发出请求,所以我非常感谢您的帮助。非常感谢。在尝试使用基本URI时,我还得到了一个403状态代码。

curl请求-更改了敏感信息。

curl -X POST 
--url 'https://api.myapi.io/v2/apps/mine/xxx123/data/ticket/search' 
-H 'x-api-key: myapiKEY123'
-H 'Accept: application/json' 
-H 'Content-type: application/json' 
--data-raw '{
"startDate": "2021-03-01",
"endDate": "2021-04-12"
}'

python代码当前

import json
import requests
API_KEY = "myapiKEY123"
client_ID = 'xxx123'
url = '/v2/apps/mine/' + client_ID + '/data/ticket/search'
params = dict(key=API_KEY, lang='en-es')
requestObject = requests.get(
url, params=params, headers=headers)
print(requestObject.status_code, requestObject.reason)

当前错误消息:

requests.exceptions.MissingSchema: Invalid URL '/v2/apps/mine/xxx123/data/ticket/search': No schema supplied. Perhaps you meant http:///v2/apps/mine/xxx123/data/ticket/search?

您的URL上没有架构(http/https(,这也不是一个完整的URL:

import requests
api_key = "myapiKEY123"
client_id = 'xxx123'
url = f'https://api.myapi.io/v2/apps/mine/{client_id}/data/ticket/search'
headers = {
'x-api-key': api_key,
'Accept': 'application/json',
'Content-type': 'application/json',
}
data = {
'startDate': '2021-03-01',
'endDate': '2021-04-12',
}
response = requests.get(url, data=data, headers=headers, timeout=10)
response.raise_for_status()

然后,将响应打印为JSON(如果他们使用JSON响应,这很可能(,如response.json()或文本response.textresponse.raise_for_status()将检查状态代码是否指示故障(例如,响应代码为400-599(,并用状态代码和错误引发异常。

您也没有按照curl建议的格式传递API键,我在上面修复了这一点。我还添加了一个超时,因为请注意,请求库默认情况下没有超时,所以如果服务器行为不端,连接将永远阻塞,这是不好的。

我还怀疑您是否应该将开始和结束日期作为查询参数而不是请求正文中的数据来传递,所以我也进行了更新。使用params将导致如下请求:

https://api.myapi.io/v2/apps/mine/{client_ID}/data/ticket/search?startDate=2021-03-01&endDate=2021-04-12

curl(以及我上面的例子(所做的是将这些值作为JSON传递到POST请求体中。

requests.get()将返回一个requests.Response对象,因此将其分配给一个名为requestObject的变量也是有点荒谬的。

查看以下文档:

  • 发布请求
  • 在URLS中传递参数
  • 自定义页眉
  • 超时
  • 错误和异常

这不是代码中的函数问题,但按照惯例,函数和变量名在Python中应该是小写的,并使用下划线来分隔术语,而不是驼色大小写。例如,response_object而不是responseObject,api_key而不是api_key,以及client_id而不是client_id。同样,这并不会让你的代码不工作,这只是惯例。你可以忽略它,但我至少想指出它。

为了修复您的即时错误,您传递到requests函数的url不完整。您得到的消息显示url以/v2开头,而它需要有完整的url,即以https://开头。

对于您的标题问题,标题是一个简单的键/值对字典,大致如下:


headers = {"x-api-key": "myapiKEY123", }

从那里,您可以将它正确地传递到requests.get函数中。

最新更新