Python が CONNECT に常に HTTP/1.0 を送るという古い説明は、もはや安全な一般則ではありません。Python 3.12 は http.client のトンネリングを HTTP/1.1 に変更し、Host ヘッダーが指定されない場合の自動生成を追加しました。

この変更は文書化された標準ライブラリの実装に属します。高レベルの HTTP ライブラリはトンネルの動作を上書きまたはラップする可能性があるため、そのバージョンと Python のバージョンの両方を記録してください。

プロキシがトンネルを拒否する場合は、そのクライアントが実際に生成した CONNECT 交換を調べてください。宛先リクエストの HTTP バージョンを変更したり、Web サイトへのリクエストに Host ヘッダーを追加したりしても、以前のトンネルリクエストが必ず変わるわけではありません。

同様に、古い Requests アダプターの例でプライベートフィールドを編集すると、アプリケーションが廃れた内部 API に固定される可能性があります。互換性がありサポートされたクライアントと実行環境の組み合わせ、および文書化されたプロキシ統合を優先してください。

レポートでは 2 つの会話を分けて扱ってください。まず トンネルを開くために使用した HTTP リクエスト、次にその内部で宛先と交渉したプロトコルです。両者は異なるバージョンを使い、異なる段階で失敗する可能性があります。

関連記事