Réponse rapide
Que signifie Read timed out (ReadTimeout) avec un proxy ?
Délai de lecture atteint signifie que votre client a attendu plus longtemps que son délai de lecture pour les prochains octets de la réponse. Via les proxies résidentiels CrawlRelay, le retard vient généralement d’une cible lente ou d’une sortie domestique lente. Définissez séparément les délais de connexion et de lecture, environ 10 et 30 à 60 secondes pour les pages HTML, et réessayez une requête expirée une fois sur une nouvelle sortie.
Read timed out (ReadTimeout) en un coup d'œil
| Erreur | Read timed out (ReadTimeout) |
|---|---|
| Type | Erreur de timeout client |
| Envoyé par | Votre client HTTP, lorsqu’aucune donnée n’arrive dans le délai de lecture |
| Défini dans | Client setting, no protocol status |
| Réessayer ? | Oui, une ou deux fois sur une nouvelle sortie |
| Vérification initiale | Comparez votre délai de lecture au temps de réponse normal de la cible |
Que signifie Read timed out (ReadTimeout) ?
Les clients ont généralement deux minuteurs. Le délai de connexion limite le temps d’attente pour ouvrir la connexion au proxy. Le délai de lecture limite le temps d’attente entre octets une fois la requête envoyée. Un délai de lecture indique que la connexion a marché mais que la réponse était trop lente.
Sans délais explicites, certains clients attendent indéfiniment. Dans Python requests, aucun délai n’est défini par défaut, donc une requête bloquée peut geler un worker.
À quoi ressemble a read timeout en Python, curl, Node.js et navigateurs ?
La même erreur s'affiche différemment selon chaque outil. Voici les messages à rechercher dans vos logs :
- Python requests :
ReadTimeout: HTTPSConnectionPool(...): Read timed out. (read timeout=10) - httpx :
httpx.ReadTimeout - Node.js :
ETIMEDOUT,ESOCKETTIMEDOUT, ou unAbortErrorde votre propre minuterie - Playwright :
TimeoutError: page.goto: Timeout 30000ms exceeded
Quelles sont les causes de a read timeout ?
Probablement en premier lieu :
- Une page ciblée lente, comme les résultats de recherche ou les pages dynamiques lourdes.
- Une sortie lente : débit montant domestique, Wi-Fi ou une cellule mobile occupée.
- Des téléchargements volumineux lus en un bloc au lieu d’être streamés.
- Des délais trop courts pour le type de page.
- Pages dans le navigateur qui attendent l’inactivité réseau sur des sites qui ne cessent jamais de charger des trackers.
Comment diagnostiquer a read timeout étape par étape ?
- Mesurez la requête sans proxy pour avoir une base de référence.
- Enregistrez séparément le temps jusqu’au premier octet et le temps total.
- Vérifiez la taille de réponse des URL lentes.
- Dans les navigateurs, vérifiez quelle condition
waitUntilvous utilisez.
# 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_URLComment résoudre a read timeout ?
- Définissez les deux délais : connexion environ 10 secondes, lecture 30 à 60 secondes pour le HTML, plus pour les gros fichiers.
- Streammez les grosses réponses et écrivez-les en morceaux sur disque.
- Utilisez
domcontentloadedau lieu de network idle dans Playwright quand vous n’avez besoin que du HTML. - Bloquez les ressources lourdes inutiles dans les navigateurs, comme la vidéo.
- Réessayez une fois sur une nouvelle sortie, puis placez l’URL en file lente.
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...Dois-je réessayer après a read timeout ?
Réessayez un délai de lecture une ou deux fois sur une nouvelle sortie. Si la même URL continue de faire timeout, donnez-lui un délai plus long dans une file lente distincte plutôt que d’augmenter le délai pour tout. Attention aux effets secondaires en double : ne réessayez que les requêtes sûres à répéter, comme GET.
Quelle est l'incidence de Read timed out (ReadTimeout) sur CrawlRelay ?
Chaque nouvelle connexion CrawlRelay sans ID de session utilise une sortie résidentielle différente, donc une réessai teste aussi une connexion domestique différente. Gardez les sessions collantes courtes pour les cibles lentes : si la sortie est lente, chaque requête dans la session est lente.
Passerelle : gw.crawlrelay.com, port 7777 (HTTP, HTTPS via CONNECT) et port 7778 (SOCKS5). Format du nom d'utilisateur : USERNAME-country-{cc}-state-{state}-city-{city}-zip-{zip}-asn-{asn}-session-{id}-ttl-{minutes}. Voir aussi : 504 Gateway Timeout · Connection reset · Guide de concurrence.
Read timed out (ReadTimeout) : questions fréquentes des développeurs
Quel délai devrais-je utiliser pour scraper avec des proxies ?
Commencez avec environ 10 secondes pour la connexion et 30 secondes pour la lecture pour les pages HTML, puis ajustez selon vos mesures. Les API JSON sont souvent plus rapides ; les gros fichiers et pages de recherche lentes nécessitent plus. Définissez-les explicitement : Python requests n’a pas de délai par défaut.
Un timeout me coûte-t-il du trafic ?
Seulement pour les octets transférés avant le timeout. Une requête expirée avant le premier octet a presque rien transféré. Un gros téléchargement bloqué à mi-chemin a transféré des données. Streammez les gros fichiers et reprenez-les là où possible.
Pourquoi les délais arrivent-ils par rafales ?
Souvent parce que la cible ralentit sous charge, parfois c'est votre propre charge. Des pics sur plusieurs sorties à la fois indiquent la cible ; des délais d'attente isolés concernent des sorties lentes uniques. Réduisez la concurrence sur l'hôte quand un pic démarre.
Autres erreurs de proxy dans cette référence
Codes d'état HTTP
- 401 Unauthorized vs 407
- 403 Forbidden
- 407 Proxy Authentication Required
- 429 Too Many Requests
- 502 Bad Gateway
- 503 Service Unavailable
- 504 Gateway Timeout
Erreurs du navigateur et du client
Erreurs de connexion et TLS
Proxies résidentiels avec documentation couvrant les cas de défaillance
Proxies résidentiels CrawlRelay de 0,50 $US/GB, trafic sans expiration.