如何在Python Requests中使用代理(HTTP/HTTPS與Session連線池)
更新於:
Python的 requests 套件透過 proxies 字典接收認證的 VinaProxy 代理,將 'http' 與 'https' 鍵值皆對應到 http://user:pass@ip:port。將該字典掛載至常駐的 requests.Session() 可以重複利用底層TCP連線,大幅降低網路爬蟲的開銷並提升抓取效率。
proxies = {'http': 'http://user:pass@ip:port', 'https': 'http://user:pass@ip:port'}- 1 個IP₫40,000
- 5+ 個IP₫35,000
- 10+ 個IP₫25,000
- 20+ 個IP₫25,000
- 50+ 個IP₫25,000
- 100+ 個IP₫25,000
- 200+ 個IP₫25,000
- 500+ 個IP₫25,000
- 1000+ 個IP₫22,000
- 2000+ 個IP₫20,000
- 1 個IP₫40,000
- 5+ 個IP₫35,000
- 10+ 個IP₫25,000
- 20+ 個IP₫25,000
- 50+ 個IP₫25,000
- 100+ 個IP₫25,000
- 200+ 個IP₫25,000
- 500+ 個IP₫25,000
- 1000+ 個IP₫22,000
- 2000+ 個IP₫20,000
配置proxies字典格式與重複利用Session連線
對每個網址獨立呼叫 requests.get() 會在每次請求時重新進行TCP交握與TLS憑證協商。將代理綁定到 session = requests.Session() 能在連續請求中維持代理TCP通道暢通。
| Requests參數 | 建議程式碼語法 | 技術作用說明 |
|---|---|---|
'http' 鍵值 | 'http://user:pass@ip:port' | 透過代理轉發普通HTTP請求 |
'https' 鍵值 | 'http://user:pass@ip:port' | 使用 http:// 通訊協定讓底層 urllib3 發出HTTP CONNECT指令建立TLS通道 |
timeout 元組 | timeout=(5, 15) | 5秒連線逾時與15秒讀取逾時,防止背景執行緒當住卡死 |
| IP池輪替 | itertools.cycle(proxy_list) | 在你的專屬靜態IP池中均勻平攤輪詢請求 |
避免常見的urllib3與ProxyError錯誤陷阱
- 針對
'http'與'https'字典鍵,代理URL前綴請統一使用http://(而非https://),除非代理連接埠明確要求TLS-over-TLS雙重加密 - 如果密碼中含有特殊字元,請使用
urllib.parse.quote(password, safe='')進行URL編碼轉換 - 出現
407 Proxy Authentication Required錯誤通常表示URL字串中的帳號或密碼與控制台資料不符 - 該設定邏輯完全相容於
httpx.Client(proxy='http://user:pass@ip:port')以及aiohttp的session.get(url, proxy=...)
操作步驟
- 1
將ip:port:user:pass轉換為URL格式
使用我們的代理格式轉換工具將 VinaProxy 代理清單快速轉換為
http://user:pass@ip:port字串。 - 2
定義proxies字典
在Python腳本中宣告
proxies = {'http': 'http://user:pass@ip:port', 'https': 'http://user:pass@ip:port'}。 - 3
掛載至requests.Session()實例
初始化
s = requests.Session()並呼叫s.proxies.update(proxies)以啟用持續性Keep-Alive連線池。 - 4
發送測試請求驗證對外IP
執行
print(s.get('https://vinaproxy.com/api/my-ip', timeout=10).json()),確認回應的JSON正確顯示代理IP。
常見問題
為什麼'https'鍵的代理URL依然使用'http://user:pass@ip:port'?
http:// 前綴是用來告知 urllib3 如何連線至代理伺服器本體(透過標準HTTP CONNECT建立通道),而發送至目標 https:// 網站的端到端流量全程皆受TLS高度加密保護。
在Python中如何讓25個靜態代理在發送請求時自動輪替?
將25個代理URL載入至 pool = itertools.cycle(PROXIES),在每次呼叫時傳入 proxies={'http': p, 'https': p},並搭配適當的頻率限制。
VinaProxy 會對Python爬蟲腳本限制流量或按GB計費嗎?
不會。所有專屬IPv4與靜態住宅ISP方案皆享有每月不限流量,絕不收取額外流量費用。
打造不限流量的Python爬蟲代理池
即時開通涵蓋7個熱門國家的專屬IPv4與靜態住宅ISP代理。
購買Python代理