requests --- HTTP 用戶端#

requests 模組提供一個精簡的 HTTP/HTTPS 用戶端 API,類似於 Python requests 函式庫。每個請求函式都會回傳一個 requests.Response 物件。

範例::

import requests

# GET a JSON resource.
r = requests.get("https://httpbin.org/get")
print(r.status_code, r.reason)
print(r.json())

# POST JSON.
r = requests.post(
    "https://httpbin.org/post",
    json={"id": 1, "value": 42},
    headers={"X-Source": "openmv"},
)
print(r.json())

Response 類別#

class requests.Response(code: int, reason: str, headers: bytes = None, content: bytes = None)#

代表一個 HTTP 回應。實例由 requests.request 與各方法的輔助函式回傳。

status_code: int#

伺服器回傳的整數 HTTP 狀態碼。

reason: str#

伺服器回傳的原因片語(解碼後的 str)。

encoding: str#

用於解碼 requests.Response.headers 與 requests.Response.content 的字串編碼。預設為 "utf-8"。

headers: str#

以 requests.Response.encoding 解碼並以 str 形式回傳的回應標頭。

content: str#

以 requests.Response.encoding 解碼並以 str 形式回傳的回應主體。

json() → dict#

將 requests.Response.content 解析為 JSON 並回傳所得的物件。

函式#

requests.request(method: str, url: str, data: bytes | str | None = None, json: Any | None = None, files: dict | None = None, headers: dict | None = None, auth: tuple | None = None, stream: Any | None = None, timeout: float | None = 5.0) → Response#

向 url 傳送一個 HTTP 請求並回傳一個 requests.Response。

  • method --- 以 str 形式表示的 HTTP 方法(例如 "GET"、"POST")。

  • url --- 目標 URL。必須以 http:// 或 https:// 開頭。

  • data --- 原始請求主體。str 會在傳送前以 UTF-8 編碼。若有設定,會自動加入 Content-Length。

  • json --- 序列化為 JSON 並作為主體傳送的物件。會設定 Content-Type: application/json。

  • files --- 將欄位名稱對應到 (filename, fileobj) 元組的字典。以 multipart/form-data 形式傳送。

  • headers --- 額外請求標頭的字典。該字典會被複製,因此呼叫端的字典絕不會被修改(而且為 auth 加入的 Authorization 標頭也不會洩漏到重複使用該字典的後續請求中)。

  • auth --- 用於 HTTP 基本驗證的 (username, password) 元組。

  • stream --- 為了 API 相容性而接受;未使用。

  • timeout --- socket 逾時秒數,在連線建立後生效。預設為 5.0;傳入 None 可無限期阻塞。逾時後會引發 OSError。

以 Transfer-Encoding: chunked 傳送的回應會被透明地解碼,因此 requests.Response.content 永遠保存的是已解除分塊的主體。回應標頭的比對不區分大小寫。不會跟隨重新導向:帶有 Location 標頭的 3xx 回應會引發 NotImplementedError。

requests.head(url: str, **kw: Any) → Response#

傳送一個 HTTP HEAD 請求並回傳一個 Response。

HEAD 與 GET 相同,差別在於伺服器只回覆狀態行與標頭,主體為空。可用它來檢查資源是否存在、在不下載酬載的情況下檢視 Content-Length / Content-Type,或在發出較重的 GET 之前先探測 URL。

引數:

  • url -- 目標 URL;必須以 http:// 或 https:// 開頭。

  • headers(關鍵字引數)-- 額外請求標頭的字典。

  • auth(關鍵字引數)-- 用於 HTTP 基本驗證的 (username, password) 元組。

來自 request() 的 data / json / files / stream 為求完整性而接受,但對 HEAD 而言鮮少有意義。

requests.get(url: str, **kw: Any) → Response#

傳送一個 HTTP GET 請求並回傳一個 Response。

GET 是用於擷取 url 所識別資源之表示形式的標準動詞。它是安全的(不會造成伺服器端狀態變更)且具冪等性。

引數:

  • url -- 目標 URL;必須以 http:// 或 https:// 開頭。

  • headers(關鍵字引數)-- 額外請求標頭的字典(例如 Authorization 或 Accept)。

  • auth(關鍵字引數)-- 用於 HTTP 基本驗證的 (username, password) 元組。

  • timeout(關鍵字引數)-- socket 逾時秒數(預設 5.0)。

透過 data / json 傳送請求主體是底層 request() 所允許的,但會被大多數伺服器忽略。

requests.post(url: str, **kw: Any) → Response#

傳送一個 HTTP POST 請求並回傳一個 Response。

POST 向 url 提交資料,通常用於建立新的從屬資源、觸發表單提交,或叫用某個動作。它既不安全也不具冪等性:重複呼叫可能會建立重複的資源。

引數:

  • url -- 目標 URL;必須以 http:// 或 https:// 開頭。

  • data(關鍵字引數)-- 原始請求主體(bytes 類)。會自動傳送 Content-Length 標頭。

  • json(關鍵字引數)-- 序列化為 JSON 並作為主體傳送的物件。會設定 Content-Type: application/json。

  • files(關鍵字引數)-- 將欄位名稱對應到 (filename, fileobj) 的字典。以 multipart/form-data 形式傳送。

  • headers(關鍵字引數)-- 額外請求標頭的字典。

  • auth(關鍵字引數)-- 用於 HTTP 基本驗證的 (username, password) 元組。

  • timeout(關鍵字引數)-- socket 逾時秒數(預設 5.0)。對於 LLM API 之類回應較慢的端點,請將其調高。

data / json / files 之中至多傳入一個。

requests.put(url: str, **kw: Any) → Response#

傳送一個 HTTP PUT 請求並回傳一個 Response。

PUT 以所提供的表示形式取代 url 處的資源,若不存在則建立它。它具冪等性:重複相同的 PUT 會產生相同的最終狀態。

引數:

  • url -- 目標 URL;必須以 http:// 或 https:// 開頭。

  • data(關鍵字引數)-- 原始的替換主體(bytes 類)。

  • json(關鍵字引數)-- 序列化為 JSON 並作為替換主體傳送的物件。會設定 Content-Type: application/json。

  • headers(關鍵字引數)-- 額外請求標頭的字典。

  • auth(關鍵字引數)-- 用於 HTTP 基本驗證的 (username, password) 元組。

傳入 data 或 json 以攜帶新的表示形式。

requests.patch(url: str, **kw: Any) → Response#

傳送一個 HTTP PATCH 請求並回傳一個 Response。

PATCH 對 url 處的資源套用部分修改 -- 只有包含在請求主體中的欄位會變更。與 PUT 不同,它不要求具冪等性(不過許多 API 會使其具冪等性)。

引數:

  • url -- 目標 URL;必須以 http:// 或 https:// 開頭。

  • data(關鍵字引數)-- 原始的差異主體(bytes 類)。格式取決於伺服器(例如 JSON Patch、JSON Merge Patch)。

  • json(關鍵字引數)-- 序列化為 JSON 的差異物件。會設定 Content-Type: application/json。

  • headers(關鍵字引數)-- 額外請求標頭的字典。

  • auth(關鍵字引數)-- 用於 HTTP 基本驗證的 (username, password) 元組。

requests.delete(url: str, **kw: Any) → Response#

傳送一個 HTTP DELETE 請求並回傳一個 Response。

DELETE 請求移除 url 處的資源。它具冪等性:刪除一個已被刪除的資源並非錯誤(伺服器通常會回傳 404,但最終狀態相同)。

引數:

  • url -- 目標 URL;必須以 http:// 或 https:// 開頭。

  • headers(關鍵字引數)-- 額外請求標頭的字典。

  • auth(關鍵字引數)-- 用於 HTTP 基本驗證的 (username, password) 元組。

透過 data / json 傳送主體是底層 request() 所允許的,但鮮少與 DELETE 一起使用。