簡體   English   中英

將此 curl 轉換為 Python 請求

[英]Translate this curl to Python request

我希望有人可以幫助我將這個 curl 請求轉換為使用 Python 請求庫的語法。 這個 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.text response.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 (以及我上面的示例)正在做的是在 POST 請求正文中將這些值作為 JSON 傳遞時。

requests.get()將返回requests.Response object,因此將其分配給名為requestObject的變量也有點荒謬。

查看以下文檔:

這不是您的代碼中的功能問題,但按照慣例,function 和變量名稱在 Python 中應為小寫,並使用下划線分隔術語,而不是駝峰式大小寫。 例如 response_object 而不是 responseObject,api_key 而不是 API_KEY,以及 client_id 而不是 client_ID。 同樣,它不會使您的代碼不起作用,這只是慣例。 你可以忽略它,但我至少想指出它。

為了解決您的直接錯誤,您傳遞給請求 function 的 url 不完整。 您收到的消息顯示 url 以/v2開頭,而它需要完整的 url,即https://開頭。

對於您的 header 問題,標題是鍵/值對的簡單字典,大致如下:


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

從那里,您將其傳遞給requests.get function 正確。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM