HTTP コンテキストのプロキシオプションは PHP の HTTP ストリームラッパーに属します。stream_socket_client が作成する生の TCP 接続は、そのオプションがコンテキストオブジェクトに存在するというだけでは HTTP プロキシクライアントにはなりません。

コードが宛先アドレスに直接接続する場合、その TCP 経路を開いています。代わりにプロキシアドレスに接続する場合、次のバイト列が依然としてプロキシプロトコルを実装する必要があります。

HTTP CONNECT の場合、それは有効な宛先ホストとポート、必要なプロキシ認証、応答の完全な解析、そして宛先プロトコルが始まる前の受け入れを意味します。成功フレーズを探す単一の fread 呼び出しは完全なコネクタではありません。TCP は応答を複数の読み取りに分割したり、保持しなければならない追加のバイトを返したりすることがあります。

HTTPS 宛先の場合、TLS はその後、確立されたトンネルを通じて開始され、宛先の身元を検証する必要があります。プロキシのホスト名はウェブサイトの証明書の身元ではありません。

タスクが単に URL を取得することである場合、必要なプロキシプロトコルに対する文書化されたサポートを持つクライアントまたはコネクタを使用してください。PHP cURL の HTTP と SOCKS の設定は、サポートされた URL 取得経路の一つを提供します。生のストリームは、アプリケーションがその低レベルのプロトコル作業を自ら担う場合に有用です。無関係な HTTP ラッパーの例から前提を暗黙に引き継ぐべきではありません。

関連記事