常見問題

文件的這個部分回答關於 Requests 的常見問題。

編碼資料?

Requests 會自動解壓縮 gzip 編碼的回應,並盡可能將回應內容解碼為 Unicode。

當安裝了 brotlibrotlicffi 套件時,Requests 也會解碼 Brotli 編碼的回應。

如果需要,您也可以直接存取原始回應(甚至 socket)。

自訂 User-Agent?

Requests 允許您輕鬆覆寫 User-Agent 字串,以及任何其他 HTTP 標頭。請參閱關於標頭的文件

為什麼不是 Httplib2?

Chris Adams 在 Hacker News 上給出了精彩的總結

httplib2 是您應該使用 requests 的原因之一:它作為客戶端更受尊重,但文件記錄不夠完善,而且基本操作仍然需要太多程式碼。我很欣賞 httplib2 正在努力做的事情,即構建現代 HTTP 客戶端存在大量底層的麻煩,但實際上,只需改用 requests 即可。Kenneth Reitz 非常積極主動,他了解簡單的事情應該簡單到什麼程度,而 httplib2 更像是學術練習,而不是人們應該用來構建生產系統的東西 [1]。

聲明:我被列在 requests AUTHORS 檔案中,但可以聲稱大約 0.0001% 的貢獻歸功於我。

1. http://code.google.com/p/httplib2/issues/detail?id=96 是一個很好的例子:一個影響許多人的惱人錯誤,幾個月前就有可用的修復程式,當我在一個 fork 中應用它並處理了幾個 TB 的資料時,它工作得很好,但它花了一年多的時間才進入主幹,甚至更長時間才進入 PyPI,任何其他需要 “httplib2” 的專案都會獲得可用的版本。

Python 3 支援?

是!Requests 官方支援 Python 3.8+ 和 PyPy。

Python 2 支援?

否!從 Requests 2.28.0 開始,Requests 不再支援 Python 2.7。無法遷移的使用者應釘選至 requests<2.28。完整資訊可以在 psf/requests#6023 中找到。

強烈建議使用者立即遷移到 Python 3.8+,因為 Python 2.7 自 2020 年 1 月 1 日起不再接收錯誤修復或安全更新。

什麼是「hostname doesn’t match」錯誤?

SSL 憑證驗證 無法將伺服器回應的憑證與 Requests 認為正在連線的主機名稱比對時,就會發生這些錯誤。如果您確定伺服器的 SSL 設定是正確的(例如,因為您可以使用瀏覽器訪問該網站),並且您正在使用 Python 2.7,則可能的解釋是您需要伺服器名稱指示 (Server-Name-Indication)。

伺服器名稱指示 (Server-Name-Indication),或 SNI,是 SSL 的官方擴展,其中客戶端告訴伺服器它正在連線的主機名稱。當伺服器使用虛擬主機時,這非常重要。當此類伺服器託管多個 SSL 站點時,它們需要能夠根據客戶端連線的主機名稱返回適當的憑證。

Python 3 已經在其 SSL 模組中包含了對 SNI 的原生支援。