Kort antwoord
Wat betekent Read timed out (ReadTimeout) bij een proxy?
Read timed out betekent dat je client langer wachtte dan zijn read timeout op de volgende bytes van het antwoord. Via CrawlRelay residential proxies komt de vertraging meestal door een trage doelwebsite of een trage home exit. Stel aparte connect- en read timeouts in, ongeveer 10 respectievelijk 30 tot 60 seconden voor HTML-pagina's, en probeer een timed-out verzoek eenmaal opnieuw op een nieuwe exit.
Read timed out (ReadTimeout) in één oogopslag
| Fout | Read timed out (ReadTimeout) |
|---|---|
| Type | Client time-out fout |
| Verzonden door | Je HTTP-client wanneer er binnen de read timeout geen data binnenkwam |
| Gedefinieerd in | Client setting, no protocol status |
| Opnieuw proberen? | Ja, één of twee keer op een nieuwe exit |
| Eerst controleren | Vergelijk je read timeout met de normale reactietijd van de doelwebsite |
Wat betekent Read timed out (ReadTimeout)?
Clients hebben meestal twee timers. De connect timeout beperkt hoe lang de client wacht om verbinding te maken met de proxy. De read timeout beperkt hoe lang hij wacht tussen bytes zodra het verzoek is verzonden. Een read timeout betekent dus dat de verbinding gelukt is maar het antwoord te langzaam kwam.
Zonder expliciete timeouts wachten sommige clients oneindig. Bij Python requests is geen timeout standaard, waardoor een vastlopend verzoek een worker kan blokkeren.
Hoe ziet a read timeout 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:
ReadTimeout: HTTPSConnectionPool(...): Read timed out. (read timeout=10) - httpx:
httpx.ReadTimeout - Node.js:
ETIMEDOUT,ESOCKETTIMEDOUT, of eenAbortErrorvan je eigen timer - Playwright:
TimeoutError: page.goto: Timeout 30000ms exceeded
Wat veroorzaakt a read timeout?
Waarschijnlijk eerst:
- Een trage doelpagina, zoals zoekresultaten of zware dynamische pagina's.
- Een trage exit: uploadsnelheid thuis, Wi-Fi of een drukke mobiele cel.
- Grote downloads ingelezen in één blok in plaats van gestreamd.
- Te strakke timeouts voor dit type pagina.
- Browserpagina's die wachten op netwerk idle op sites die nooit stoppen met trackers laden.
Hoe diagnosticeer ik a read timeout stap voor stap?
- Meet de tijd zonder proxy om een basislijn te krijgen.
- Log tijd tot de eerste byte en totale tijd apart.
- Controleer responsgroottes voor de trage URL's.
- In browsers, controleer welke
waitUntil-conditie je gebruikt.
# 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 read timeout op?
- Stel beide timeouts in: connect ongeveer 10 seconden, read 30 tot 60 seconden voor HTML, meer voor grote bestanden.
- Stream grote antwoorden en schrijf ze in stukken naar schijf.
- Gebruik
domcontentloadedin plaats van network idle in Playwright als je alleen HTML nodig hebt. - Blokkeer zware bronnen die je niet nodig hebt in browsers, zoals video.
- Probeer eenmaal opnieuw op een nieuwe exit, daarna verhuis de URL naar een langzame wachtrij.
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...Moet ik opnieuw proberen na a read timeout?
Probeer een read timeout één of twee keer opnieuw op een nieuwe exit. Als dezelfde URL steeds time-outs geeft, geef hem dan een langere timeout in een aparte langzame wachtrij, in plaats van de timeout voor alles te verhogen. Let op dubbele bijwerkingen: herhaal alleen verzoeken die veilig opnieuw uit te voeren zijn, zoals GET.
Hoe geldt Read timed out (ReadTimeout) voor CrawlRelay?
Elke nieuwe CrawlRelay-verbinding zonder sessie-ID gebruikt een andere residential exit, dus een herhaling test ook een andere home-verbinding. Houd sticky sessions kort voor trage doelen: als de exit traag is, is elk verzoek in die sessie langzaam.
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: 504 Gateway Timeout · Connection reset · Concurrency guide.
Read timed out (ReadTimeout): vragen die ontwikkelaars stellen
Welke timeout moet ik gebruiken voor scrapen met proxies?
Begin met ongeveer 10 seconden verbinden en 30 seconden lezen voor HTML-pagina's, en pas aan op basis van je eigen metingen. JSON API's zijn vaak sneller; grote bestanden en trage zoekpagina's hebben meer nodig. Stel ze expliciet in: Python requests heeft standaard geen timeout.
Kosten timeouts mij verkeer?
Alleen voor de bytes die al verzonden waren vóór de timeout. Een verzoek dat time-out gaat bij het wachten op de eerste byte heeft bijna niets verplaatst. Een grote download die halverwege time-out gaat, heeft wel data overgebracht. Stream grote bestanden en hervat waar mogelijk.
Waarom gebeuren timeouts in clusters?
Vaak omdat het doel onder belasting vertraagt, soms door je eigen belasting. Piekbelastingen tegelijk over veel exits wijzen op het doel; geïsoleerde time-outs wijzen op enkele trage exits. Verlaag de gelijktijdigheid op de host als een piek begint.
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.