Åtgärda ERR_TUNNEL_CONNECTION_FAILED med en proxy
Updated:
För att läsa in en https://-sida via en proxy skickar webbläsaren en CONNECT-förfrågan och väntar på att proxyn öppnar en tunnel till webbplatsen. ERR_TUNNEL_CONNECTION_FAILED visas när proxyn svarar med ett felmeddelande i stället för att godkänna förfrågan. Problemet är att Chrome inte talar om vilket fel det gäller, så det första steget är att ta reda på den faktiska koden.
Två fall vi återskapade
Båda kördes mot en testproxy, här omskriven med dokumentationsadressen 203.0.113.10:8080 och user123:pass456. I ett vanligt Chrome-fönster leder 407-fallet inte till ett tunnelfel; Chrome öppnar i stället en inloggningsruta för proxyns användarnamn och lösenord. Tunnelfel orsakade av 407 uppstår därför främst i automatiseringsverktyg och i appar som inte kan fråga efter ett lösenord.
| Proxyn svarar på CONNECT med | Chrome visar | curl visar |
|---|---|---|
407 utan möjlighet att ange lösenord (headless Chrome) | ERR_TUNNEL_CONNECTION_FAILED | curl: (56) CONNECT tunnel failed, response 407 |
502 eftersom proxyn inte kan nå webbplatsen | ERR_TUNNEL_CONNECTION_FAILED | curl: (56) CONNECT tunnel failed, response 502 |
Orsaker, med de troligaste först
- Ett automatiseringsskript skickar inga inloggningsuppgifter. Chromes flagga
--proxy-servertar endast emot värd och port, inte user:pass. Headless Puppeteer eller Selenium får 407 och rapporterar ett tunnelfel. - En mobilapp bakom en lösenordsskyddad Wi-Fi-proxy. Appen saknar inloggningsruta, vilket gör att HTTPS slutar fungera medan webbläsaren fortfarande fungerar.
- Proxyn kan inte nå målet. Den returnerar 502 på CONNECT; sidan om 502 Bad Gateway förklarar detta mer ingående.
- Endast vissa webbplatser fungerar inte. Destinationen blockerar eller ligger nere medan andra webbplatser fungerar via samma proxy.
Hitta den faktiska koden med ett enda curl-kommando
Kör curl -v -x http://user123:[email protected]:8080 https://example.com med dina egna värden. Titta på raden direkt efter > CONNECT example.com:443 HTTP/1.1: 407 innebär att du bör följa 407-guiden; 502 pekar på destinationen eller nätverksvägen bakom proxyn. Föredrar du att inte använda en terminal kan du klistra in raden i proxytestaren, som visar auth failed (407) eller HTTP 502 för samma situationer.
Lösningar för olika miljöer
- Puppeteer: behåll
--proxy-server=http://host:portvid start och anropapage.authenticate({ username, password })före navigering. Ett fullständigt exempel finns i Puppeteer-proxyguiden. - Playwright: skicka med
proxy: { server, username, password }när webbläsaren startas så hanterar Playwright 407-svaret automatiskt; se Playwright. - Selenium: Chrome tar inte emot user:pass på kommandoraden; Selenium-guiden visar fungerande alternativ.
- Chrome på Windows: om inloggningsrutan aldrig visas kontrollerar du om ett proxytillägg blockerar den, och provar sedan igen i ett fönster utan tillägg.
- Mobiltelefoner: för appar som kräver en autentiserad proxy använder du en proxyapp med stöd för user:pass enligt installationsguiden för Android.
Steg för steg
- 1
Identifiera CONNECT-svaret
Kör
curl -v -xmed din proxyrad, eller klistra in den i testaren, för att se om proxyn returnerar 407 eller 502. - 2
För 407: ange inloggningsuppgifter korrekt
I skript använder du bibliotekets autentiseringskrok i stället för att placera user:pass i
--proxy-server. - 3
För 502: prova en annan webbplats
Läs in en stor webbplats som example.com via samma proxy. Om det fungerar är det den ursprungliga destinationen som är problemet.
- 4
Kör igen och bekräfta utgående IP
När tunneln har öppnats besöker du min IP-adress i samma webbläsare för att bekräfta att trafiken går via proxyn.
Vanliga frågor
Varför fungerar http-sidor medan https-sidor misslyckas?
Vanlig http behöver inget CONNECT; proxyn vidarebefordrar förfrågan direkt. Endast https öppnar en tunnel, så tunnelfel uppstår bara där.
Vad orsakar ERR_TUNNEL_CONNECTION_FAILED på Android?
Oftast en app som inte kan skicka vidare användarnamn och lösenord till en Wi-Fi-proxy. Prova samma sida i Chrome för Android; om Chrome kan fråga efter uppgifterna och läsa in sidan ligger problemet i appen.
Kan jag placera user:pass i --proxy-server?
Nej. Chrome ignorerar inloggningsuppgifter i den flaggan, vilket leder till 407 och tunnelfel. Autentisera i stället via Puppeteer, Playwright eller ett webbläsartillägg.
Försvinner tunnelfelet om jag byter till SOCKS5?
Bara om din beställning gäller SOCKS5. VinaProxy erbjuder både HTTP(S) och SOCKS5; välj det protokoll som din beställning visar i kontrollpanelen, eftersom en felmatchning orsakar andra fel.
Proxyservrar som fungerar med Puppeteer och Playwright
VinaProxy-proxyservrar använder standardinloggning med user:pass som populära automatiseringsbibliotek hanterar direkt.
Se priser