httpx[http2]
和 httpx
的核心區別在于 HTTP/2 協議支持,具體差異及使用場景如下:
1. 功能區別
命令/安裝方式 | 協議支持 | 額外依賴 | 適用場景 |
---|---|---|---|
pip install httpx | 僅 HTTP/1.1 | 無 | 通用請求,輕量依賴 |
pip install 'httpx[http2]' | 支持 HTTP/2 | 需安裝 h2>=3,<5 等 | 高性能傳輸、強制HTTP/2的網站 |
- HTTP/1.1:文本格式傳輸,每個請求獨立連接,效率較低。
- HTTP/2:二進制分幀傳輸,多路復用,頭部壓縮,性能更高。
2. 使用場景
(1) 基礎版 (httpx
)
- 普通API調用:如RESTful接口、爬取大多數網站(非強制HTTP/2)。
- 輕量級需求:無需復雜特性時減少依賴體積。
(2) HTTP/2擴展版 (httpx[http2]
)
- 強制HTTP/2的網站:如某些現代API或反爬嚴格的站點。
- 高并發請求:利用多路復用降低延遲(如微服務通信)。
- 流式傳輸:如實時數據推送、大文件下載。
3. 代碼示例
啟用HTTP/2(需顯式聲明)
import httpx
import asyncio
# 同步客戶端
with httpx.Client(http2=True) as client:response = client.get("https://spa16.scrape.center")print(response.http_version) # 輸出 "HTTP/2"# 異步客戶端
async def test():async with httpx.AsyncClient(http2=True) as client:res = await client.get("https://spa16.scrape.center")print(res.http_version)print(res.status_code)print(res.text)asyncio.run(test())
注意事項
- 若服務器不支持HTTP/2,會自動降級為HTTP/1.1。
- 需通過
response.http_version
確認實際使用的協議。
4. 擴展功能
httpx[http2]
還可組合其他特性:
# 同時啟用HTTP/2和Brotli壓縮
pip install 'httpx[http2,brotli]'
總結建議
- 優先選擇
httpx[http2]
:現代項目推薦,兼容性更強。 - 僅需HTTP/1.1時:使用基礎版以減少依賴。