クイックアンサー
プロキシでの503 Service Unavailableとは何を意味していますか?
503 Service Unavailableはサーバーが過負荷、メンテナンス、保護ルールのため現在リクエストを処理できない状態を指します。CrawlRelayの住宅用プロキシ経由では、Retry-Afterヘッダーとレスポンスボディを確認してください。メンテナンスや過負荷の503は時間経過で解消しますが、チャレンジページは自動化トラフィックをフィルタリングしているため、アクセスを遅くする必要があります。
503 Service Unavailableを一目で理解する
| エラー | 503 Service Unavailable |
|---|---|
| タイプ | HTTPステータスコード(5xx、サーバーエラー) |
| 送信元 | ターゲットのウェブサイト、そのCDN、または出口がないときのプロキシ |
| 定義されている場所 | RFC 9110, section 15.6.4 (Retry-After: section 10.2.3) |
| 再試行しますか? | はい、Retry-Afterや遅延後に可能です |
| まず確認すること | Retry-Afterヘッダーの有無とボディがCDNのチャレンジページかどうかを確認してください |
503 Service Unavailableとは何ですか?
RFC 9110は503を一時的状態と定義しています。サーバーは稼働中ですが現在リクエストに応じられず、Retry-Afterで再訪問時間を示すことがあります。
実際には以下の3つの状況が503を共有します:実際に過負荷かメンテナンス中のサイト、自動化トラフィックとみなすものにチャレンジページを表示するCDN、そして非常に狭いターゲティングのため出口がないプロキシゲートウェイです。ボディとヘッダーで判別可能です。
a 503はPython、curl、Node.js、ブラウザではどのように表示されますか?
同じ失敗でもツールごとに異なる表示になります。ログ検索用のメッセージは以下の通りです:
- Python requests / httpx:
status_code == 503、時にRetry-After付き - Scrapy: デフォルトで再試行(503は
RETRY_HTTP_CODESに含む) - curl:
HTTP/2 503、多くの場合CDN名を示すserver:ヘッダー付き - ブラウザ: メンテナンスページやインタースティシャルチェックページ
a 503の原因は何ですか?
最も可能性が高いのは次の通りです:
- ターゲット側の過負荷やメンテナンス(
Retry-After付きの場合が多い) - CDNがクライアントをチェックするために表示するチャレンジページ(ステータス503または403)
- クロール負荷:クローラーがサイトトラフィックの大部分を占めている場合
- 狭すぎるターゲティング:例として小規模な都市で出口がない場合
- CDNやクラウドリージョンの上流障害
a 503を段階的に診断するには?
Retry-Afterとserverヘッダーを読み、ボディのHTMLタイトルを確認します。- 同じ国からブラウザでページを開き、実際のユーザー視点を確認します。
- クロウラーを数分停止し、テストリクエストを送信:通れば負荷が原因です。
- ターゲティングを国単位に広げて比較します。
# Use the URL that fails; with https://api.ipify.org instead, you test the gateway alone.
# "HTTP/1.1 200 Connection established" first, then the site's own status: the site answered.
curl -v -x http://USERNAME:[email protected]:7777 https://TARGET_URL
# Same test through the SOCKS5 port, with DNS resolved at the exit
curl -v --socks5-hostname gw.crawlrelay.com:7778 --proxy-user USERNAME:PASSWORD https://TARGET_URLa 503をどう修正しますか?
Retry-Afterの遅延または指数的遅延で待って再試行してください。- 対象ホストへの負荷を下げる。 並列リクエストを減らし、遅延を長くし、キャッシュも利用。
- チャレンジページは停止サインとして扱う。 CAPTCHA解決ツールやブラウザ偽装ツールで突破を試みず、レートを下げて必要ならサイトに連絡。
- 503が狭い都市ターゲットで出る場合はターゲティングを広げる。
import random
import time
import requests
PROXY = "http://USERNAME:[email protected]:7777"
PROXIES = {"http": PROXY, "https": PROXY}
RETRY_STATUSES = {429, 502, 503, 504}
def fetch(url, attempts=5, timeout=(10, 30)):
for attempt in range(attempts):
try:
r = requests.get(url, proxies=PROXIES, timeout=timeout)
except (requests.exceptions.ConnectionError, requests.exceptions.Timeout):
r = None # dropped exit, reset or timeout: a new connection gets a new exit
if r is not None and r.status_code not in RETRY_STATUSES:
return r
retry_after = r.headers.get("Retry-After", "") if r is not None else ""
if retry_after.isdigit():
wait = int(retry_after)
else:
wait = min(60, 2 ** attempt) + random.uniform(0, 1)
time.sleep(wait)
raise RuntimeError("giving up on %s after %d attempts" % (url, attempts))a 503の後に再試行すべきですか?
503を再試行する際は忍耐強く行ってください。可能ならRetry-Afterを使い、なければ数秒から1〜2分の範囲で指数的に待機してください。数分以上ほとんどのリクエストが503の場合はホストを完全に停止し、後で再開してください。チャレンジページは本当の障害と別にログで管理します。
503 Service UnavailableはCrawlRelayにどう関係しますか?
CrawlRelayはターゲティングに合った住宅用IPでリクエストを送信します。国単位ターゲティングは最も多くの出口が利用でき、都市単位は狭いです。503が都市単位のターゲティングでのみ発生する場合は、何か変更する前に国単位で同じリクエストを試してください。
ゲートウェイ:gw.crawlrelay.com、ポート7777(HTTP、HTTPSはCONNECT経由)、ポート7778(SOCKS5)。ユーザー名形式:USERNAME-country-{cc}-state-{state}-city-{city}-zip-{zip}-asn-{asn}-session-{id}-ttl-{minutes}。関連情報:429 Too Many Requests · 502 Bad Gateway · 504 Gateway Timeout。
503 Service Unavailable:開発者がよく尋ねる質問
なぜ自宅ではなくプロキシ経由のみ503が出るのですか?
サイトがプロキシ経由のトラフィックを異なる扱いにしている場合(チャレンジページを表示)、またはターゲティングが狭すぎて出口が不足している場合があります。両ケースのレスポンスボディを比較してください。チャレンジページなら遅くするべきで、狭いターゲティングに関する短いプロキシメッセージなら位置フィルターを広げてください。
503はブロックと同じですか?
いいえ。実際の503は一時的で時間経過で解消されます。503で表示されるチャレンジページはフィルターで、多くの場合、自動化のペースやパターンが検出されています。並行数を減らし遅延を加えてください。サイトが自動アクセスを完全に拒否する場合はそれを尊重し、APIやライセンスデータの利用を検討してください。
503は何回再試行すべきですか?
1つのURLあたり指数的遅延で3〜5回の再試行が妥当な上限です。それ以上は個別URLの再試行ではなくホスト全体を一時停止すべきです。問題のあるサイトは再試行で早く回復しません。ホスト名と停止時間を記録し、後で再開してください。
他のプロキシエラーのリファレンス
HTTPステータスコード
- 401 Unauthorized vs 407
- 403 Forbidden
- 407 Proxy Authentication Required
- 429 Too Many Requests
- 502 Bad Gateway
- 503 Service Unavailable
- 504 Gateway Timeout
ブラウザとクライアントのエラー
接続とTLSエラー
失敗ケースを網羅したドキュメント付きレジデンシャルプロキシ
$0.50/GB発のCrawlRelayレジデンシャルプロキシ、期限切れがないトラフィック。