プロキシタイムアウトエラー:接続が止まり、最終的に切断される
更新日:
タイムアウトは他のエラーと違って何も情報を返さないため、特に原因特定が困難です。接続拒否もパスワード要求もなく、ソフトウェアが諦めるまで沈黙が続きます。多くの場合、パケットが途中で消失しているか、プロキシが接続を受け付けたものの時間内に応答していないことが原因です。どの段階で応答が途絶えているかを特定することが解決への第一歩となります。
検証した3種類のタイムアウト出力
TCP接続を受け付けたまま応答を返さないテスト用プロキシを用意し、2種類のタイムアウト設定で同一リクエストを実行しました(アドレス表記は 203.0.113.10:8080、user123:pass456 に置き換えています)。
curl --connect-timeout 10 -x http://user123:[email protected]:8080 https://example.comはcurl: (28) Proxy CONNECT aborted due to timeoutを返します。この制限は接続フェーズのみを対象とします。-m 10(転送全体に対する制限)に切り替えると、curl: (28) Connection timed out after 10002 millisecondsが返されます。- 同じプロキシを指定した Chromium では
ERR_TIMED_OUTが表示され、プロキシチェッカーではtimeoutと判定されます。
主な原因(可能性の高い順)
- ネットワークがプロキシポートを通知なく遮断している。 オフィス、ホテル、学内 Wi-Fi などでは、標準外のポート宛てパケットを拒否せず破棄することが多く、その結果延々と応答待ちになります。
- コード側のタイムアウト設定が短すぎる。 遠隔地のプロキシではハンドシェイクに少し時間がかかります。2〜3秒の制限では、正常に動作しているプロキシでも切断されてしまう場合があります。
- プロキシまたは接続先サーバーが過負荷になっている。 プロキシは接続を受け付けたもののウェブサイト側の応答を待っており、先にクライアント側のタイムアウト上限に達してしまいます。
- IPアドレスの間違い。 誤入力によって応答しないアドレスに接続すると、接続拒否ではなく無応答になります。
環境別の解決策
- Windows/Chrome: スマートフォンのモバイルデータ通信経由で同じプロキシを試してください。タイムアウトが発生しなくなる場合、元のネットワークによる遮断が原因です。プロキシとファイアウォールの確認を参照してください。
- アンチディテクトブラウザ: プロキシチェックボタンの待機時間は固定されているのが一般的です。数回再試行し、一部のプロファイルのみ失敗する場合は、正常に動作するプロファイルと設定行を比較してください。
- Telegram: プロキシ有効化後に「接続中」のまま止まる現象も、多くはタイムアウトが原因です。Telegram の設定を変更する前に、チェッカーでプロキシをテストしてください。
- Python requests: 接続に10秒、読み込みに30秒を指定する
timeout=(10, 30)を渡します。停止している箇所を特定するためにrequests.exceptions.ConnectTimeoutとrequests.exceptions.ReadTimeoutを個別にキャッチし、無制限のタイムアウトにするのではなく間隔を空けた再試行処理を追加してください。 - curl: 接続ステップ単体を計測するには
--connect-timeoutを、コマンド全体の処理時間を制限するには-mを使用します。
タイムアウトか、それとも単に遅いだけか?
低速なプロキシであっても、遅れるだけで応答自体は返ってきます。プロキシスピードテストで実際の応答時間を確認し、ソフトウェアのタイムアウト値に近い場合は制限時間を引き上げるか、ターゲットに近い国のプロキシを選択してください。何度テストしても応答がない場合は本物のタイムアウトであり、チェッカーの結果を添えてサポートチケットを発行するのが次のステップです。
手順
- 1
チェッカーでタイムアウトを確認する
プロキシ設定行をプロキシチェッカーに貼り付けます。
timeoutの結果は、待機時間内に応答が届かなかったことを意味します。 - 2
ネットワークを切り替えて原因を絞り込む
モバイルデータ通信で再試行します。接続できた場合、元のネットワークまたはそのファイアウォールに問題があります。
- 3
応答時間を測定する
プロキシスピードテストを実行して、プロキシが単に遅いのか、完全に応答がないのかを確認します。
- 4
ソフトウェアのタイムアウトとリトライを調整する
接続制限時間を約10秒に引き上げ、再試行処理を追加してタスクを再実行します。
よくある質問
プロキシのタイムアウトは、プロキシが完全に停止していることを意味しますか?
必ずしもそうではありません。多くのタイムアウトはユーザー側のネットワークによるポート遮断が原因です。判断を下す前に、別のネットワークからテストしてください。
コード内でプロキシに設定すべき適切なタイムアウト値は?
接続に約10秒、読み込みに約30秒を目安に設定するのが適切です。遠隔地のプロキシや大容量ページの取得には、より長い時間が必要になる場合があります。
プロキシ経由で特定のウェブサイトだけがタイムアウトするのはなぜですか?
その場合、プロキシ自体は正常に動作しており、接続先サイトが遅いかブロックしています。無応答ではなく 502 が返される場合は、502 Bad Gateway を参照してください。
タイムアウトと接続拒否の違いは何ですか?
接続拒否は即座にエラーが返されますが、タイムアウトは制限時間に達するまで待ち続けます。詳細はプロキシサーバーによる接続拒否を参照してください。
ターゲット市場に近いプロキシを選択
VinaProxy はベトナム、米国、日本、韓国、シンガポール、英国、香港のIPを提供しており、ターゲットのすぐ近くに接続を維持できます。
料金を見る