将此curl转换为Python请求

2024-09-29 23:23:56 发布

您现在位置:Python中文网/ 问答频道 /正文

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

卷曲请求-更改敏感信息

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?


Tags: apps代码apijsonurlsearchdataparams
2条回答

您的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()将检查状态代码是否指示故障(例如response code was a 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(以及我上面的示例)正在做的是在POST请求主体中以JSON的形式传递这些值时

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

查看以下文档:

这在代码中不是函数问题,但是by convention,函数和变量名在Python中应该是小写的,并且使用下划线来分隔术语,而不是大小写。例如,response_对象而不是responseObject,api_键而不是api_键,client_id而不是client_id。同样,这不会使代码无法工作,这只是惯例。你可以忽略它,但我想至少指出一点

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

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


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

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

相关问题 更多 >

    热门问题