Corriger l'erreur ERR_TUNNEL_CONNECTION_FAILED avec un proxy
Mis à jour:
Pour charger une page https:// via un proxy, le navigateur envoie une requête CONNECT et attend que le proxy établisse un tunnel vers le site. L'erreur ERR_TUNNEL_CONNECTION_FAILED survient lorsque le proxy répond par une erreur au lieu d'autoriser la liaison. Le problème : Chrome n'affiche pas la cause exacte. La première étape consiste donc à identifier le véritable code d'erreur.
Deux cas de figure reproduits
Ces deux tests ont été réalisés sur un proxy de test, illustré ici avec les identifiants de documentation 203.0.113.10:8080 et user123:pass456. Dans une fenêtre Chrome standard, le code 407 ne génère pas d'erreur de tunnel : Chrome ouvre simplement une boîte de dialogue pour demander l'identifiant et le mot de passe du proxy. Les erreurs de tunnel liées à une 407 apparaissent donc surtout dans les outils d'automatisation et les applications incapables d'afficher cette invite de connexion.
| Le proxy répond à CONNECT par | Chrome affiche | curl affiche |
|---|---|---|
407 sans invite pour saisir un mot de passe (Chrome headless) | ERR_TUNNEL_CONNECTION_FAILED | curl: (56) CONNECT tunnel failed, response 407 |
502 car le proxy ne peut pas joindre le site | ERR_TUNNEL_CONNECTION_FAILED | curl: (56) CONNECT tunnel failed, response 502 |
Causes principales, par ordre de probabilité
- Un script d'automatisation n'envoie aucun identifiant. Le flag
--proxy-serverde Chrome n'accepte que l'hôte et le port, sans user:pass. Puppeteer ou Selenium en mode headless reçoit un code 407 et signale un échec de tunnel. - Une application mobile derrière un proxy Wi-Fi protégé par mot de passe. L'application ne propose aucune invite d'authentification : les requêtes HTTPS échouent alors que la navigation web fonctionne toujours.
- Le proxy ne parvient pas à joindre le site cible. Il renvoie une erreur 502 à la requête CONNECT ; notre guide sur l'erreur 502 Bad Gateway détaille ce cas.
- Seuls certains sites sont inaccessibles. Le serveur distant est indisponible ou bloque vos requêtes, alors que d'autres sites fonctionnent parfaitement via le même proxy.
Identifier le code réel avec une seule commande curl
Exécutez curl -v -x http://user123:[email protected]:8080 https://example.com en remplaçant les valeurs par vos propres paramètres. Observez la ligne située juste après > CONNECT example.com:443 HTTP/1.1 : un code 407 invite à suivre notre guide sur l'erreur 407 ; un code 502 indique un problème au niveau de la destination ou de la route réseau en amont du proxy. Si vous préférez éviter le terminal, collez votre ligne dans notre testeur de proxy, qui indiquera auth failed (407) ou HTTP 502 pour ces mêmes situations.
Solutions selon votre environnement
- Puppeteer : conservez
--proxy-server=http://host:portau lancement et appelezpage.authenticate({ username, password })avant toute navigation. Exemple complet dans notre guide proxy Puppeteer. - Playwright : transmettez
proxy: { server, username, password }lors du lancement du navigateur ; Playwright gère automatiquement l'authentification 407. Voir notre guide Playwright. - Selenium : Chrome n'accepte pas user:pass directement en ligne de commande ; le guide Selenium propose des solutions adaptées.
- Chrome sur Windows : si la boîte de dialogue d'authentification n'apparaît jamais, vérifiez si une extension de proxy la bloque, puis faites un essai dans une fenêtre vierge de toute extension.
- Smartphones : pour les applications nécessitant un proxy avec mot de passe, utilisez une application proxy dédiée prenant en charge les identifiants user:pass, comme expliqué dans notre guide de configuration Android.
Étape par étape
- 1
Identifier la réponse à la commande CONNECT
Exécutez
curl -v -xavec les paramètres de votre proxy, ou collez-les dans le testeur, pour savoir si le proxy renvoie une erreur 407 ou 502. - 2
En cas d'erreur 407 : configurez correctement vos identifiants
Dans vos scripts, utilisez le mécanisme d'authentification natif de la bibliothèque plutôt que d'insérer user:pass dans
--proxy-server. - 3
En cas d'erreur 502 : testez un autre site
Chargez un grand site comme example.com via le même proxy. S'il répond correctement, le problème vient du site cible initial.
- 4
Relancez et vérifiez l'adresse IP de sortie
Dès que le tunnel est établi, consultez la page mon IP depuis ce même navigateur pour vérifier que le trafic transite bien par le proxy.
Questions fréquentes
Pourquoi les pages http s'affichent-elles alors que les pages https échouent ?
Le protocole http standard ne nécessite pas de commande CONNECT ; le proxy transfère directement la requête. Seul le protocole https ouvre un tunnel chiffré, d'où l'apparition exclusive des erreurs de tunnel sur ces connexions.
Quelle est la cause de l'erreur ERR_TUNNEL_CONNECTION_FAILED sur Android ?
Le cas le plus fréquent concerne une application incapable de transmettre l'identifiant et le mot de passe requis par un proxy Wi-Fi. Tentez d'ouvrir la même page dans Chrome pour Android : si Chrome affiche l'invite de connexion et charge la page, l'application est en cause.
Peut-on indiquer user:pass directement dans --proxy-server ?
Non. Chrome ignore les identifiants passés dans cet argument, ce qui déclenche une erreur 407 puis l'échec du tunnel. Authentifiez-vous via Puppeteer, Playwright ou une extension dédiée.
Passer en SOCKS5 permet-il d'éliminer cette erreur de tunnel ?
Uniquement si votre commande inclut le protocole SOCKS5. VinaProxy propose à la fois HTTP(S) et SOCKS5 : sélectionnez le protocole indiqué sur votre commande dans l'espace client, car une discordance de configuration génère d'autres erreurs.
Des proxys parfaitement compatibles avec Puppeteer et Playwright
Les proxys VinaProxy utilisent une authentification standard user:pass, prise en charge nativement par les principales bibliothèques d'automatisation.
Voir les tarifs