Risposta rapida
Cosa significa 503 Service Unavailable con un proxy?
503 Service Unavailable significa che il server non può gestire la richiesta in questo momento, per sovraccarico, manutenzione o regole di protezione. Tramite i proxy residentiali CrawlRelay, leggi l'intestazione Retry-After e il corpo della risposta: un 503 per manutenzione o sovraccarico si risolve col tempo, mentre una pagina challenge indica che il sito filtra traffico automatizzato e dovresti rallentare.
503 Service Unavailable a colpo d'occhio
| Errore | 503 Service Unavailable |
|---|---|
| Tipo | Codice di stato HTTP (5xx, errore server) |
| Inviato da | Il sito target, il suo CDN, o il proxy quando non ha exit disponibili |
| Definito in | RFC 9110, section 15.6.4 (Retry-After: section 10.2.3) |
| Riprovarlo? | Sì, dopo Retry-After o un backoff |
| Prima verifica | Controlla l'intestazione Retry-After e se il corpo è una pagina di sfida CDN |
Cosa significa 503 Service Unavailable?
La RFC 9110 definisce 503 come condizione temporanea. Il server è attivo ma non disponibile o non disposto a servire questa richiesta ora, e può indicare quando tornare con Retry-After.
In pratica, tre situazioni diverse condividono questo codice: un sito veramente sovraccarico o in manutenzione, un CDN che presenta una pagina challenge al traffico che considera automatizzato, e un gateway proxy senza exit disponibili per un targeting molto specifico. Corpo e intestazioni li distinguono.
Com'è a 503 in Python, curl, Node.js e browser?
Lo stesso errore si presenta in modo diverso in ogni strumento. Questi sono i messaggi da cercare nei log:
- Python requests / httpx:
status_code == 503, talvolta conRetry-After - Scrapy: riprovato di default (503 in
RETRY_HTTP_CODES) - curl:
HTTP/2 503, spesso con intestazioneserver:che nomina il CDN - Browser: una pagina di manutenzione o una pagina di controllo interstiziale
Cosa causa a 503?
Probabilmente prima:
- Sovraccarico o manutenzione lato target, spesso con
Retry-After. - Una pagina challenge che un CDN serve a client da verificare, con stato 503 o 403.
- Il tuo carico, quando il tuo crawler rappresenta una grande quota del traffico del sito.
- Targeting stretto, come una piccola città, quando nessun exit corrisponde in quel momento.
- Un’interruzione a monte nel CDN o nella regione cloud usata dal sito.
Come diagnostico a 503 passo dopo passo?
- Leggi
Retry-Aftere l'intestazioneserver, poi osserva il titolo HTML del corpo. - Carica la pagina in un browser dallo stesso paese per vedere cosa vede un utente.
- Metti in pausa il crawler per qualche minuto e prova una richiesta: se va, il tuo carico era la causa.
- Allarga il targeting al livello paese e confronta.
# 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_URLCome risolvo a 503?
- Attendi e riprova usando il ritardo
Retry-Aftero un backoff esponenziale. - Riduci il carico su quell'host: meno richieste parallele, ritardi più lunghi, caching.
- Considera una pagina challenge come segnale di stop a quel ritmo. Non usare strumenti di risoluzione CAPTCHA o camuffamento browser per passarla; abbassa la frequenza e contatta il sito se serve accesso.
- Allarga il targeting quando il 503 arriva con un filtro ristretto su città.
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))Devo riprovare dopo a 503?
Riprova un 503, ma con pazienza. Usa Retry-After se presente; altrimenti backoff esponenziale da pochi secondi fino a uno o due minuti. Se un host restituisce 503 alla maggior parte delle richieste per più di pochi minuti, sospendilo del tutto e torna dopo. Conta le challenge pages separatamente dai blackout reali nei tuoi log.
Come si applica 503 Service Unavailable a CrawlRelay?
CrawlRelay invia la tua richiesta tramite un IP residential scelto in base al target. Il targeting a livello paese usa il set più ampio di exit; il targeting a livello città è più ristretto. Se i 503 appaiono solo con filtro città, prova la stessa richiesta solo a livello paese prima di cambiare altro.
Gateway: gw.crawlrelay.com, porta 7777 (HTTP, HTTPS tramite CONNECT) e porta 7778 (SOCKS5). Formato username: USERNAME-country-{cc}-state-{state}-city-{city}-zip-{zip}-asn-{asn}-session-{id}-ttl-{minutes}. Correlato: 429 Too Many Requests · 502 Bad Gateway · 504 Gateway Timeout.
503 Service Unavailable: domande frequenti dagli sviluppatori
Perché ricevo 503 solo tramite proxy e non da casa?
O il sito tratta diversamente il tuo traffico proxy, spesso mostrando una pagina challenge, oppure il tuo targeting è così stretto che gli exit sono pochi. Confronta il corpo della risposta nei due casi. Una pagina challenge significa rallentare; un breve messaggio proxy con targeting stretto significa allargare il filtro di localizzazione.
Un 503 è la stessa cosa di essere bloccati?
No. Un vero 503 è temporaneo e si risolve col tempo. Una pagina challenge servita con 503 è un filtro, e di solito indica che il ritmo o il pattern sembrano automatizzati. Abbassa la concorrenza e aggiungi ritardi. Se il sito non vuole alcun accesso automatizzato, rispettalo e cerca un’API o dati con licenza.
Quante volte devo riprovare un 503?
Da tre a cinque volte con backoff esponenziale è un limite ragionevole per un URL. Oltre, metti in pausa l’intero host invece di riprovare singoli URL, perché un sito in difficoltà non si riprende più velocemente con retry. Registra host e orario per riprendere dopo.
Altri errori proxy in questo riferimento
Codici di stato HTTP
- 401 Unauthorized vs 407
- 403 Forbidden
- 407 Proxy Authentication Required
- 429 Too Many Requests
- 502 Bad Gateway
- 503 Service Unavailable
- 504 Gateway Timeout
Errori del browser e client
Errori di connessione e TLS
Proxy residenziali con documentazione che copre i casi di errore
Proxy residenziali CrawlRelay da 0,50 USD/GB, traffico che non scade mai.