Kort antwoord
Wat betekent 503 Service Unavailable bij een proxy?
503 Service Unavailable betekent dat de server het verzoek nu niet kan verwerken door overbelasting, onderhoud of een beschermende regel. Via CrawlRelay residential proxies, lees de Retry-After header en de response body: een onderhouds- of overload 503 verdwijnt met de tijd, terwijl een challenge pagina betekent dat de site geautomatiseerd verkeer filtert en je moet vertragen.
503 Service Unavailable in één oogopslag
| Fout | 503 Service Unavailable |
|---|---|
| Type | HTTP-statuscode (5xx, serverfout) |
| Verzonden door | De doelwebsite, zijn CDN, of de proxy als er geen exit beschikbaar is |
| Gedefinieerd in | RFC 9110, section 15.6.4 (Retry-After: section 10.2.3) |
| Opnieuw proberen? | Ja, na Retry-After of een backoff |
| Eerst controleren | Controleer op een Retry-After header en of de body een CDN challenge pagina is |
Wat betekent 503 Service Unavailable?
RFC 9110 definieert 503 als een tijdelijke toestand. De server is actief maar niet bereid of niet in staat dit verzoek nu te bedienen, en kan aangeven wanneer je terug moet komen met Retry-After.
In de praktijk delen drie verschillende situaties deze code: een site die echt overbelast is of in onderhoud, een CDN dat een challenge pagina toont aan verkeer dat het als geautomatiseerd ziet, en een proxy gateway die geen exit heeft voor zeer nauwe targeting. De body en headers onderscheiden ze.
Hoe ziet a 503 eruit in Python, curl, Node.js en browsers?
Dezelfde fout verschijnt anders in elk hulpmiddel. Dit zijn de berichten om in je logs te zoeken:
- Python requests / httpx:
status_code == 503, soms metRetry-After - Scrapy: standaard opnieuw geprobeerd (503 staat in
RETRY_HTTP_CODES) - curl:
HTTP/2 503, vaak met eenserver:header die de CDN benoemt - Browsers: een onderhoudspagina of een interstitial controlepagina
Wat veroorzaakt a 503?
Waarschijnlijk eerst:
- Overbelasting of onderhoud aan de kant van de target, vaak met
Retry-After. - Een challenge pagina die een CDN toont aan clients die gecontroleerd worden, met status 503 of 403.
- Jouw eigen load, als je crawler een groot deel is van het verkeer naar de site.
- Nauwe targeting, zoals een kleine stad, wanneer er geen passende exit beschikbaar is.
- Een upstream storing bij de CDN of cloudregio die de site gebruikt.
Hoe diagnosticeer ik a 503 stap voor stap?
- Lees
Retry-Afteren deserverheader, kijk dan naar de HTML titel in de body. - Open de pagina in een browser vanuit hetzelfde land om te zien wat een persoon ziet.
- Pauzeer je crawler een paar minuten en test één verzoek: lukt dat, dan was jouw load de oorzaak.
- Verruim de targeting naar landniveau en vergelijk.
# 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_URLHoe los ik a 503 op?
- Wacht en probeer opnieuw met de
Retry-Aftervertraging of een exponentiële backoff. - Verlaag je load op die host: minder parallelle verzoeken, langere pauzes, caching.
- Behandel een challenge pagina als stopteken voor dat tempo. Gebruik geen CAPTCHA-oplossers of browser-disguises om erdoorheen te komen; verlaag je frequentie en neem contact op met de site als je toegang nodig hebt.
- Maak de targeting ruimer wanneer de 503 komt met een nauwe stadfilter.
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))Moet ik opnieuw proberen na a 503?
Probeer een 503 opnieuw, maar geduldig. Gebruik Retry-After als die er is; anders bouw exponentieel terug van een paar seconden tot een minuut of twee. Als een host voor de meeste verzoeken langer dan een paar minuten 503 teruggeeft, pauzeer die host helemaal en probeer later opnieuw. Log challenge pagina's apart van echte storingen in je logs.
Hoe geldt 503 Service Unavailable voor CrawlRelay?
CrawlRelay stuurt je verzoek via een residential IP die passend is bij jouw targeting. Targeting op landniveau gebruikt de breedste set exits; targeting op stadniveau is nauwer. Als 503's alleen verschijnen met een stadfilter, probeer dan hetzelfde verzoek met alleen het land voordat je iets anders verandert.
Gateway: gw.crawlrelay.com, poort 7777 (HTTP, HTTPS via CONNECT) en poort 7778 (SOCKS5). Gebruikersnaamformaat: USERNAME-country-{cc}-state-{state}-city-{city}-zip-{zip}-asn-{asn}-session-{id}-ttl-{minutes}. Gerelateerd: 429 Too Many Requests · 502 Bad Gateway · 504 Gateway Timeout.
503 Service Unavailable: vragen die ontwikkelaars stellen
Waarom krijg ik alleen 503 via de proxy en niet thuis?
Of de site behandelt jouw geproxiede verkeer anders, vaak met een challenge pagina, of je targeting is zo nauw dat er weinig exits zijn. Vergelijk de response body in beide gevallen. Een challenge pagina betekent vertragen; een korte proxy-melding met nauwe targeting betekent maak het locatiefilter ruimer.
Is een 503 hetzelfde als geblokkeerd zijn?
Nee. Een echte 503 is tijdelijk en verdwijnt met de tijd. Een challenge pagina met 503 is een filter en betekent meestal dat je tempo of patroon geautomatiseerd lijkt. Verlaag de gelijktijdigheid en voeg pauzes toe. Als de site helemaal geen geautomatiseerde toegang wil, respecteer dat dan en zoek naar een API of gelicentieerde data.
Hoe vaak moet ik een 503 opnieuw proberen?
Drie tot vijf keer met exponentiële backoff is een redelijke bovengrens voor één URL. Daarna pauzeer je beter de hele host in plaats van individuele URLs te blijven proberen, want een site in problemen herstelt niet sneller door het blijven opnieuw proberen. Log de host en tijd zodat je later verder kunt gaan.
Andere proxyfouten in deze referentie
HTTP-statuscodes
- 401 Unauthorized vs 407
- 403 Forbidden
- 407 Proxy Authentication Required
- 429 Too Many Requests
- 502 Bad Gateway
- 503 Service Unavailable
- 504 Gateway Timeout
Browser- en clientfouten
Verbindings- en TLS-fouten
Residentiële proxy's met documentatie die de faalgevallen beschrijft
CrawlRelay residentiële proxy's van US$ 0,50/GB, verkeer dat nooit verloopt.