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.

Des proxys parfaitement compatibles avec Puppeteer et Playwright

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 parChrome affichecurl affiche
407 sans invite pour saisir un mot de passe (Chrome headless)ERR_TUNNEL_CONNECTION_FAILEDcurl: (56) CONNECT tunnel failed, response 407
502 car le proxy ne peut pas joindre le siteERR_TUNNEL_CONNECTION_FAILEDcurl: (56) CONNECT tunnel failed, response 502

Causes principales, par ordre de probabilité

  • Un script d'automatisation n'envoie aucun identifiant. Le flag --proxy-server de 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:port au lancement et appelez page.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. 1

    Identifier la réponse à la commande CONNECT

    Exécutez curl -v -x avec les paramètres de votre proxy, ou collez-les dans le testeur, pour savoir si le proxy renvoie une erreur 407 ou 502.

  2. 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. 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. 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

Articles liés

Erreurs de proxy
Comment corriger l'erreur 407 Proxy Authentication Required
L'erreur 407 Proxy Authentication Required signifie que le proxy a répondu mais a rejeté vos identifiants. Découvrez les sorties curl réelles, les causes probables et les solutions par application.
Erreurs de proxy
Erreurs proxy 502 Bad Gateway : identifiez l'émetteur
Une erreur 502 Bad Gateway via un proxy signifie qu'un serveur intermédiaire n'a reçu aucune réponse valide. Découvrez comment identifier le responsable, proxy ou site, avec de vraies sorties curl.
Configuration proxy
Comment configurer un proxy avec authentification dans Puppeteer (Node.js)
Configurez des proxys HTTP(S) authentifiés dans Puppeteer avec Node.js à l'aide de l'option --proxy-server et de await page.authenticate().
Configuration proxy
Comment configurer un proxy dans Playwright (authentification globale et par contexte)
Configurez des proxys HTTP(S) avec authentification dans Playwright pour Node.js et Python. Exécutez plusieurs IP statiques isolées via les BrowserContexts.
Configuration proxy
Comment configurer un proxy authentifié dans Selenium WebDriver
Configurez des proxys HTTP(S) authentifiés par identifiant et mot de passe dans Selenium WebDriver avec selenium-wire ou une extension onAuthRequired.
Outils gratuits
Proxy checker : tester vos proxies en ligne
Proxy checker gratuit : collez jusqu'à 100 proxies ip:port:user:pass et testez statut, IP de sortie et latence en ligne. Chaque erreur expliquée.
Configuration proxy
Guide de configuration d'un proxy dans Google Chrome
Configurez des proxys HTTP(S) VinaProxy dans Google Chrome sans altérer l'IP du système entier à l'aide d'extensions, de flags --proxy-server ou de profils isolés.
Configuration proxy
Comment configurer un proxy sur Windows 10 et Windows 11
Configurez les proxys HTTP(S) VinaProxy sur Windows 10 et Windows 11 via les paramètres système WinINET, les variables d'environnement PowerShell ou netsh winhttp.