Python Requestsでプロキシを使用する方法(HTTP/HTTPS & Sessionプーリング)
更新日:
Pythonの requests ライブラリは、'http' と 'https' の両スキームを http://user:pass@ip:port にマッピングする proxies 辞書を通じて VinaProxy の認証済みプロキシを適用できます。この辞書を requests.Session() に紐付けることで、下位のTCPソケットが再利用され、低オーバーヘッドで高速なWebスクレイピングが可能になります。
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の再利用
URLごとに個別に requests.get() を呼び出すと、リクエストのたびに新しいTCP接続とTLSハンドシェイクが発生します。プロキシを session = requests.Session() にバインドすることで、連続するリクエスト間でプロキシトンネル接続が維持されます。
| Requestsパラメータ | 推奨するコード構文 | 技術的な目的 |
|---|---|---|
'http' キー | 'http://user:pass@ip:port' | 通常のHTTPリクエストをプロキシ経由でルーティング |
'https' キー | 'http://user:pass@ip:port' | http:// スキームを指定し、内部の urllib3 がTLS用のHTTP CONNECTトンネルを発行 |
timeout タプル | timeout=(5, 15) | 5秒の接続タイムアウトと15秒の読み取りタイムアウトでワーカーの停止を防止 |
| プールローテーション | itertools.cycle(proxy_list) | 契約した専用固定IPプール全体に均等にリクエストを分散 |
urllib3およびProxyErrorの一般的な落とし穴
- プロキシポートが明示的にTLS-over-TLSを要求しない限り、
'http'と'https'の両キーのURLスキームには常にhttp://(https://ではなく)を使用してください - パスワードに特殊文字が含まれる場合は、
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)を呼び出して接続プールを維持します。 - 4
テストリクエストで出口IPを確認
print(s.get('https://vinaproxy.com/api/my-ip', timeout=10).json())を実行して、プロキシIPが反映されているか検証します。
よくある質問
なぜ'https'キーでも'http://user:pass@ip:port'と記述するのですか?
http:// プレフィックスは、プロキシサーバー本体への接続方法(標準のHTTP CONNECT経由)を urllib3 に指示するためのものであり、対象の https:// サイトとの通信自体は完全にエンドツーエンドでTLS暗号化されます。
Pythonで25個の固定プロキシをリクエストごとに巡回させる方法は?
25個のプロキシURLを pool = itertools.cycle(PROXIES) に読み込み、リクエストごとに proxies={'http': p, 'https': p} を渡して、適度なウェイトを設けて実行してください。
VinaProxy はPythonスクレイピングでのデータ転送量を従量課金しますか?
いいえ。専用IPv4および固定住宅ISPのすべてのプランで、帯域幅・転送量は無制限です。
通信量無制限のPythonスクレイピング用プロキシプールを構築
世界7カ国の専用IPv4および固定住宅ISPプロキシを即時提供。
Python用プロキシを購入