ERR_TUNNEL_CONNECTION_FAILED oplossen met een proxy
Updated:
Om een https://-pagina via een proxy te laden, stuurt de browser een CONNECT-verzoek en wacht tot de proxy een tunnel naar de site opent. ERR_TUNNEL_CONNECTION_FAILED verschijnt wanneer de proxy dit verzoek beantwoordt met een fout in plaats van toe te stemmen. Het addertje onder het gras is dat Chrome niet vermeldt om welke fout het gaat, dus de eerste stap is het achterhalen van de daadwerkelijke code.
Twee situaties die we hebben gereproduceerd
Beide tests zijn uitgevoerd met een testproxy, hier weergegeven met het documentatie-adres 203.0.113.10:8080 en user123:pass456. In een normaal Chrome-venster leidt de 407-situatie niet tot een tunnelfout; Chrome opent dan een inlogvenster voor de gebruikersnaam en het wachtwoord van de proxy. Tunnelfouten veroorzaakt door een 407 treden daarom vooral op in automatiseringstools en in apps die niet om een wachtwoord kunnen vragen.
| Proxy beantwoordt CONNECT met | Chrome toont | curl toont |
|---|---|---|
407 zonder mogelijkheid om een wachtwoord in te voeren (headless Chrome) | ERR_TUNNEL_CONNECTION_FAILED | curl: (56) CONNECT tunnel failed, response 407 |
502 omdat de proxy de site niet kan bereiken | ERR_TUNNEL_CONNECTION_FAILED | curl: (56) CONNECT tunnel failed, response 502 |
Oorzaken, op volgorde van waarschijnlijkheid
- Een automatiseringsscript stuurt geen inloggegevens mee. De vlag
--proxy-servervan Chrome accepteert alleen host en poort, geen user:pass. Headless Puppeteer of Selenium ontvangt een 407 en meldt een tunnelfout. - Een telefoon-app achter een met een wachtwoord beveiligde wifiproxy. De app heeft geen inlogvenster, waardoor HTTPS niet werkt terwijl de browser wel functioneert.
- De proxy kan het doel niet bereiken. Deze retourneert 502 op CONNECT; de 502 Bad Gateway-pagina behandelt dit uitgebreid.
- Slechts enkele sites werken niet. De bestemming blokkeert het verzoek of is offline, terwijl andere sites via dezelfde proxy wel werken.
Achterhaal de echte code met één curl-opdracht
Voer curl -v -x http://user123:[email protected]:8080 https://example.com uit met je eigen gegevens. Kijk naar de regel direct na > CONNECT example.com:443 HTTP/1.1: een 407 betekent dat je de 407-handleiding moet volgen; een 502 wijst op de bestemming of het netwerkpad achter de proxy. Gebruik je liever geen terminal, plak de regel dan in de proxy checker, die voor dezelfde situaties auth failed (407) of HTTP 502 meldt.
Oplossingen per omgeving
- Puppeteer: behoud
--proxy-server=http://host:portbij het opstarten en roeppage.authenticate({ username, password })aan vóór het navigeren. Een compleet voorbeeld vind je in de Puppeteer proxy-handleiding. - Playwright: geef
proxy: { server, username, password }mee bij het starten van de browser, waarna Playwright de 407 automatisch afhandelt; zie Playwright. - Selenium: Chrome accepteert geen user:pass via de opdrachtregel; de Selenium-handleiding toont werkbare opties.
- Chrome op Windows: verschijnt het inlogvenster nooit, controleer dan of een proxy-extensie dit onderdrukt en probeer het opnieuw in een venster zonder extensies.
- Telefoons: gebruik voor apps die een geauthenticeerde proxy vereisen een proxy-app met ondersteuning voor user:pass, zoals beschreven in de Android-installatiehandleiding.
Stappenplan
- 1
Identificeer het CONNECT-antwoord
Voer
curl -v -xuit met je proxygegevens, of plak ze in de checker, om te controleren of de proxy 407 of 502 retourneert. - 2
Bij 407: geef inloggegevens correct op
Gebruik in scripts de authenticatiefunctie van de bibliotheek in plaats van user:pass in
--proxy-serverte plaatsen. - 3
Bij 502: probeer een andere site
Laad een grote website zoals example.com via dezelfde proxy. Als dat werkt, ligt het probleem bij de oorspronkelijke bestemming.
- 4
Voer opnieuw uit en controleer het exit-IP
Zodra de tunnel tot stand is gebracht, ga je in diezelfde browser naar mijn IP om te bevestigen dat het verkeer via de proxy loopt.
Veelgestelde vragen
Waarom laden http-pagina's wel en falen https-pagina's?
Gewone http vereist geen CONNECT; de proxy stuurt het verzoek rechtstreeks door. Alleen https opent een tunnel, waardoor tunnelfouten alleen daar optreden.
Wat veroorzaakt ERR_TUNNEL_CONNECTION_FAILED op Android?
Meestal een app die de gebruikersnaam en het wachtwoord niet kan doorgeven aan een wifiproxy. Probeer dezelfde pagina in Chrome voor Android; als Chrome er wel om kan vragen en de pagina laadt, ligt het probleem bij de app.
Kan ik user:pass opnemen in --proxy-server?
Nee. Chrome negeert inloggegevens in die vlag, wat leidt tot een 407 en de tunnelfout. Authenticeer in plaats daarvan via Puppeteer, Playwright of een extensie.
Verhelpt overschakelen naar SOCKS5 de tunnelfout?
Alleen als je bestelling SOCKS5 betreft. VinaProxy biedt zowel HTTP(S) als SOCKS5; kies het protocol dat bij je bestelling in het dashboard staat, want een mismatch veroorzaakt andere fouten.
Proxies die werken met Puppeteer en Playwright
Proxies van VinaProxy gebruiken een standaard user:pass-aanmelding die populaire automatiseringsbibliotheken direct ondersteunen.
Bekijk prijzen