解説
HTTPプロキシは最も一般的なタイプのプロキシサーバーです。アプリケーション層でHTTPを理解します。クライアントがリクエストを送信すると、プロキシはURL、ヘッダー、(プレーンHTTPの場合)ボディを読み取ってから、リクエストを宛先に転送します。HTTPSの場合、プロキシはCONNECTメソッドを使用して宛先へのTCPトンネルを確立し、その後は暗号化されたバイトをそのままリレーするだけでコンテンツを参照することはできません。
レジデンシャル、ISP、データセンタープロバイダーを含むほとんどの商用プロキシサービスは、あらゆるHTTPクライアントやライブラリがネイティブにサポートしているためHTTPプロキシエンドポイントを公開しています。`HTTP_PROXY`および`HTTPS_PROXY`環境変数の設定、Pythonの`requests`への`proxies={...}`の渡し方、PlaywrightでのフラグによるHTTPプロキシURL(例:`http://user:pass@gate.shifter.io:10000`)の設定はすべてそのまま動作します。
HTTPとSOCKS5の違いは主にアーキテクチャ上のものです。HTTPプロキシはアプリケーション層で動作しHTTPを解析できますが、SOCKS5はトランスポート層で動作しTCP/UDPバイトをそのまま転送します。HTTPSスクレイピングにおいてはこの違いはほぼ形式的なものであり、どちらも暗号化されたバイトをトンネリングする結果になりますが、ツール全般でのHTTPプロキシサポートはより普遍的です。
仕組み
通常のHTTPでは、クライアントはプロキシに完全なリクエスト(絶対URLを使った`GET http://example.com/path HTTP/1.1`)を送信し、プロキシはURLを読み取って宛先への接続を開き、リクエストを転送してレスポンスを中継します。HTTPSの場合、クライアントはまずプロキシに`CONNECT example.com:443`リクエストを送信し、プロキシは宛先へのTCPトンネルを開きます。それ以降、クライアントとサーバーはプロキシを介してエンドツーエンドでTLS通信を行い、プロキシは暗号化されたバイトを転送するだけです。
認証は通常、`Proxy-Authorization`ヘッダー(ユーザー名:パスワードによるBasic認証)またはプロキシURL(`http://user:pass@host:port`)に認証情報をエンコードする方法で行います。商用サービスのジオターゲティングやセッションパラメーターは、通常ユーザー名(`customer-USER-country-us-session-12345`)にエンコードされます。