127.0.0.1:8080 をサービスの接続先、またはHTTPプロキシ一覧の接続先に置き換え、無害なHTTPS宛先に対して次を実行します。

curl --noproxy '' --proxy http://127.0.0.1:8080 --connect-timeout 5 --max-time 15 --verbose https://example.com/

ループバックアドレスは、自分のマシン上の待受を表します。このコマンドはそのプロキシを明示的に選び、この呼び出しについてcurlの除外リストを空にし、接続確立に五秒、全体に十五秒の上限を設けます。ブラウザーやシステムのプロキシ設定は変更しません。

シェルで curl が別のプログラムの別名になっている場合は、実際のcurl実行ファイルを使ってください。curl --version でビルドを識別できます。待受自体がTLSを要求する場合は、その文書に記載されたプロキシURLのスキームを使います。

一つの成功表示で済ませず、四つの結果を読む

  1. 選んだプロキシへの接続:そのアドレスとポートに到達できています。
  2. CONNECTの受理:プロキシがHTTPS宛先へのトンネルを開きました。
  3. 宛先証明書の検証:想定した信頼性チェックを伴ってTLSが完了しました。
  4. 宛先からの応答受信:ステータスと内容を調べ、アプリケーションが必要とする結果か確認します。

トンネルが正常でも、宛先から403や429が返ることがあります。curlはHTTPエラー応答を受信した後でも成功として終了することがあるため、応答ステータスとcurlのエラー結果の両方を記録してください。TCP接続やCONNECTの成功だけでは不十分です。

繰り返し比較しやすい簡潔な結果

Unix系シェルでは、本文を破棄して、トンネルのステータス、宛先のステータス、接続相手、経過時間を表示できます。

curl --noproxy '' --proxy http://127.0.0.1:8080 --connect-timeout 5 --max-time 15 --silent --show-error --output /dev/null --write-out 'http=%{http_code} connect=%{http_connect} peer=%{remote_ip} total=%{time_total}\n' https://example.com/

http_connect はトンネルの応答、http_code は最終的なHTTP応答を表します。remote_ip はcurlの接続相手であり、プロキシの出口アドレスを独立に測定した値ではありません。他のシステムでは /dev/null を置き換えるか、応答本文を残してください。

テストが失敗したら、接続確立または転送のどの段階で失敗したかを特定し、直接接続が許可される場所では同じ宛先と比較します。

curl --noproxy '*' --connect-timeout 5 --max-time 15 --verbose https://example.com/

--noproxy '*' はプロキシを迂回します。両方の経路で証明書検証が失敗するなら、共通の信頼設定の問題が疑われます。直接接続は成功しCONNECTが拒否されるなら、プロキシ認証やポリシーが疑われます。詳細出力には識別につながる情報が含まれる場合があるため、共有前に確認してください。

接続先、対象、タイムスタンプを結果と一緒に保存します。これで分かるのは、そのリクエストで何が機能したかです。将来の可用性、プライバシー、負荷時の性能には、それぞれ別の根拠が必要です。

関連記事