Risposta rapida
Cosa significa Read timed out (ReadTimeout) con un proxy?
Read timeout significa che il client ha aspettato più del suo timeout di lettura i prossimi byte della risposta. Attraverso proxy residenziali CrawlRelay, il ritardo solitamente dipende da un target lento o da un'uscita domestica lenta. Imposta timeout separati di connessione e lettura, circa 10 e 30-60 secondi per pagine HTML, e ritenta una richiesta scaduta una volta con una nuova uscita.
Read timed out (ReadTimeout) a colpo d'occhio
| Errore | Read timed out (ReadTimeout) |
|---|---|
| Tipo | Timeout client |
| Inviato da | Il tuo client HTTP, quando non arrivano dati entro il timeout di lettura |
| Definito in | Client setting, no protocol status |
| Riprovarlo? | Sì, una o due volte su un nuovo exit |
| Prima verifica | Confronta il tuo timeout di lettura con il normale tempo di risposta del target |
Cosa significa Read timed out (ReadTimeout)?
I client hanno di solito due timer. Il timeout di connessione limita il tempo che il client attende per aprire la connessione al proxy. Il timeout di lettura limita il tempo che attende tra i byte una volta inviata la richiesta. Un read timeout significa che la connessione ha funzionato ma la risposta è stata troppo lenta.
Senza timeout espliciti, alcuni client aspettano indefinitamente. In Python requests il timeout non è impostato di default, quindi una singola richiesta bloccata può congelare un worker.
Com'è a read timeout 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:
ReadTimeout: HTTPSConnectionPool(...): Read timed out. (read timeout=10) - httpx:
httpx.ReadTimeout - Node.js:
ETIMEDOUT,ESOCKETTIMEDOUT, o unAbortErrordal tuo timer - Playwright:
TimeoutError: page.goto: Timeout 30000ms exceeded
Cosa causa a read timeout?
Probabilmente prima:
- Una pagina target lenta, come risultati di ricerca o pagine dinamiche pesanti.
- Un'uscita lenta: velocità upload domestica, Wi-Fi o cella mobile congestionata.
- Download grandi letti in un blocco unico invece che in streaming.
- Timeout troppo stretti per il tipo di pagina.
- Pagine browser che aspettano rete inattiva su siti che non smettono mai di caricare tracker.
Come diagnostico a read timeout passo dopo passo?
- Misura la richiesta senza proxy per avere un riferimento.
- Registra separatamente il tempo al primo byte e il tempo totale.
- Controlla la dimensione delle risposte per URL lenti.
- Nei browser, verifica quale condizione
waitUntilstai usando.
# 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 read timeout?
- Imposta entrambi i timeout: connessione circa 10 secondi, lettura 30-60 secondi per HTML, di più per file grandi.
- Streamma risposte grandi e scrivile a pezzi su disco.
- Usa
domcontentloadedinvece di rete inattiva in Playwright quando ti serve solo l'HTML. - Blocca risorse pesanti non necessarie sui browser, come video.
- Ritenta una volta con nuova uscita, poi sposta l'URL in una coda lenta.
import httpx
proxy = "http://USERNAME:[email protected]:7777"
timeout = httpx.Timeout(connect=10.0, read=30.0, write=10.0, pool=10.0)
with httpx.Client(proxy=proxy, timeout=timeout) as client:
try:
r = client.get("https://api.ipify.org")
print(r.status_code, r.text)
except httpx.TimeoutException as exc:
print("timed out:", type(exc).__name__) # ConnectTimeout, ReadTimeout...Devo riprovare dopo a read timeout?
Ritenta un read timeout una o due volte con nuova uscita. Se lo stesso URL continua a scadere, assegna un timeout più lungo in una coda lenta separata invece di estendere il timeout per tutto. Attenzione agli effetti collaterali duplicati: ritenta solo richieste sicure da ripetere, come GET.
Come si applica Read timed out (ReadTimeout) a CrawlRelay?
Ogni nuova connessione CrawlRelay senza ID sessione usa un'uscita residenziale diversa, quindi un ritentativo testa anche una connessione domestica diversa. Mantieni sessioni sticky brevi per target lenti: se l'uscita è lenta, ogni richiesta nella sessione sarà lenta.
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: 504 Gateway Timeout · Connessione ripristinata · Guida alla concorrenza.
Read timed out (ReadTimeout): domande frequenti dagli sviluppatori
Qual è il timeout consigliato per lo scraping con proxy?
Inizia con circa 10 secondi per la connessione e 30 secondi per la lettura per pagine HTML, poi adatta in base alle tue misure. Le API JSON sono spesso più veloci; file grandi e pagine di ricerca lente richiedono più tempo. Imposta i timeout esplicitamente: Python requests non ha timeout di default.
Un timeout consuma traffico?
Solo per i byte trasferiti prima del timeout. Una richiesta scaduta prima del primo byte ha trasferito quasi nulla. Un download grande che scade a metà ha trasferito dati. Streamma file grandi e riprendi quando possibile.
Perché i timeout capitano a raffica?
Spesso perché il target rallenta sotto carico, a volte il carico è causato da te. Raffiche simultanee su molte uscite indicano il target; timeout isolati indicano singole uscite lente. Riduci la concorrenza sull'host quando inizia una raffica.
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.