Réponse rapide
Que signifie ERR_TUNNEL_CONNECTION_FAILED avec un proxy ?
net::ERR_TUNNEL_CONNECTION_FAILED signifie que Chrome a demandé au proxy d’ouvrir un tunnel vers un site HTTPS et que le proxy n’a pas répondu 200 Connection established. Le navigateur cache le vrai statut. Avec les proxies résidentiels CrawlRelay, la cause est généralement des identifiants manquants dans Playwright ou Puppeteer, puis une cible que la gateway ne peut pas atteindre. Reproduisez avec curl -v pour voir le vrai code.
ERR_TUNNEL_CONNECTION_FAILED en un coup d'œil
| Erreur | ERR_TUNNEL_CONNECTION_FAILED |
|---|---|
| Type | Erreur réseau Chromium |
| Envoyé par | Votre navigateur, après que le proxy a refusé ou échoué la requête CONNECT |
| Défini dans | CONNECT method: RFC 9110, section 9.3.6 |
| Réessayer ? | Seulement après que vous ayez trouvé le statut caché derrière |
| Vérification initiale | Reproduire avec curl -v pour voir le vrai statut du CONNECT |
Que signifie ERR_TUNNEL_CONNECTION_FAILED ?
Pour charger une page HTTPS via un proxy HTTP, le navigateur envoie d'abord CONNECT host:443. Si le proxy répond 200, le navigateur démarre TLS dans le tunnel. Toute autre réponse, comme 407, 403 ou 502, interrompt la tentative, et Chromium signale une erreur générique.
C'est pourquoi cette erreur vous indique où la défaillance s'est produite, dans le tunnel, mais pas pourquoi. Le pourquoi est le code d'état que le proxy a envoyé, que vous pouvez voir avec curl.
À quoi ressemble ERR_TUNNEL_CONNECTION_FAILED 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 :
- Playwright :
page.goto: net::ERR_TUNNEL_CONNECTION_FAILED at https://... - Puppeteer :
Error: net::ERR_TUNNEL_CONNECTION_FAILED at https://... - Barre d'adresse Chrome : 'Impossible d’accéder à ce site' avec le code
ERR_TUNNEL_CONNECTION_FAILED - Selenium avec Chrome : le même code dans un
WebDriverException
Quelles sont les causes de ERR_TUNNEL_CONNECTION_FAILED ?
Probablement en premier lieu :
- Aucune identification envoyée (407 caché). Chrome ignore un nom d'utilisateur et mot de passe dans
--proxy-server. - Une destination refusée (403 caché), comme une catégorie bloquée par la politique d'utilisation du proxy.
- Une cible inaccessible (502 ou 504 caché) : un hôte mort, une faute de frappe ou une erreur DNS en sortie.
- Un mauvais port : diriger le navigateur vers le port SOCKS5 comme s’il s’agissait d’un HTTP, ou l’inverse.
Comment diagnostiquer ERR_TUNNEL_CONNECTION_FAILED étape par étape ?
- Lancez la même URL via curl avec
-v(commande ci-dessous) et notez la ligne aprèsCONNECT. - Un
407indique une identification ; un403une destination refusée ; un502ou504désignent la cible ou la sortie. - Vérifiez que le navigateur utilise le port HTTP pour un serveur proxy
http://. - Testez une page simple comme
https://api.ipify.orgavant votre cible réelle.
# 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 ERR_TUNNEL_CONNECTION_FAILED ?
- Playwright : passez
server,usernameetpassworddans l’optionproxy, par navigateur ou par contexte. Voir le guide Playwright. - Puppeteer : lancez avec
--proxy-server=http://host:portet appelezpage.authenticate()avant le premiergoto. Voir le guide Puppeteer. - Selenium : exécutez un petit forwarder local qui ajoute les identifiants. Voir le guide Selenium.
- Vérifiez la destination par rapport à notre Politique d’Utilisation Acceptable.
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch(proxy={
"server": "http://gw.crawlrelay.com:7777",
"username": "USERNAME-country-us",
"password": "PASSWORD",
})
page = browser.new_page()
response = page.goto("https://api.ipify.org")
print(response.status, page.inner_text("body"))
browser.close()Dois-je réessayer après ERR_TUNNEL_CONNECTION_FAILED ?
Réessayez seulement une fois le statut caché connu. Un 407 ou 403 caché se répétera indéfiniment ; corrigez la configuration. Un 502 ou 504 caché peut être retenté sur une nouvelle sortie, comme toute erreur de passerelle.
Quelle est l'incidence de ERR_TUNNEL_CONNECTION_FAILED sur CrawlRelay ?
Le port HTTP de CrawlRelay transporte HTTPS via des tunnels CONNECT, que tous les outils basés sur Chromium supportent. Utilisez le port HTTP pour les navigateurs : Chromium ne supporte pas SOCKS5 avec nom d’utilisateur et mot de passe.
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 : 407 Proxy Authentication Required · ERR_PROXY_CONNECTION_FAILED · Guide Playwright.
ERR_TUNNEL_CONNECTION_FAILED : questions fréquentes des développeurs
Pourquoi curl fonctionne-t-il alors que Playwright affiche ERR_TUNNEL_CONNECTION_FAILED ?
Parce que curl transmet les identifiants depuis l’URL du proxy, alors que Chromium ignore les identifiants dans l’adresse du serveur proxy. Dans Playwright, passez username et password comme champs séparés de l’option proxy. Dans Puppeteer, appelez page.authenticate() avant la navigation.
Puis-je utiliser des proxies SOCKS5 avec authentification dans Chrome ?
Pas directement. Chromium supporte les proxies SOCKS5 mais pas l’authentification par nom d’utilisateur et mot de passe SOCKS5. Utilisez plutôt le port HTTP de la passerelle, qui gère les sites HTTPS via des tunnels CONNECT, ou lancez un forwarder local qui authentifie pour le navigateur.
Est-ce que ERR_TUNNEL_CONNECTION_FAILED est causé par le site web ?
Rarement directement. Le tunnel est entre le navigateur et le proxy, donc l’erreur survient avant que le site web n’observe une négociation TLS. Le site web peut être la cause indirecte s’il est inaccessible et que le proxy répond 502 ou 504 à la requête CONNECT.
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.