Scrapy で ProxyMesh の出口ヘッダーが見つからない理由
ProxyMesh は Scrapy が暗号化されたサイト応答を受け取る前に、CONNECT 上でルーティング情報を送信できます。実際にそれを運ぶ応答段階を確認してください。
Scrapy の HTTPS コールバックに X-ProxyMesh-IP がないことは、直接接続を証明するものではありません。トンネル化された HTTPS では、ProxyMesh はルーティングヘッダーを CONNECT 応答に載せます。後から届くサイト応答は TLS の内部にあり、その以前のメタデータを自動的に含むわけではありません。
コールバックでヘッダーが公開される場合は、条件付きで読み取ります:
exit_ip = response.headers.get(b'X-ProxyMesh-IP')
if exit_ip is not None:
self.logger.info('Reported exit IP: %s', exit_ip.decode('ascii'))
これはそのやり取りについてプロバイダーが報告する出口であり、設定された入口ホスト名ではありません。
トンネルのメタデータが必要な場合は、CONNECT ヘッダーを公開する互換性のあるハンドラー統合を使用してください。ProxyMesh はこの目的のために1つを維持しています。対応する Scrapy のバージョンとダウンロードハンドラーを確認してください。スパイダーの解析では、トランスポートが一度も提供しなかったヘッダーを明らかにすることはできません。
メタデータはその接続に関連付けます。トンネルを再利用しても、ページごとに別の CONNECT 応答が作られるわけではありません。宛先が観測する独立した送信元アドレスについては、プロバイダーのヘッダーを万能の IP 検出器とみなすのではなく、その宛先への受信接続を調べます。