Rješavanje greške ERR_TUNNEL_CONNECTION_FAILED uz proxy
Updated:
Da bi učitao https:// stranicu putem proxyja, preglednik šalje CONNECT zahtjev i čeka da proxy otvori tunel prema stranici. ERR_TUNNEL_CONNECTION_FAILED se pojavljuje kada proxy na taj zahtjev odgovori greškom umjesto odobrenjem. Problem je u tome što Chrome ne navodi o kojoj se grešci radi, pa je prvi zadatak otkriti stvarni kod.
Dva slučaja koja smo reprodukovali
Oba slučaja su testirana na testnom proxyju, koji je ovdje naveden s dokumentacijskom adresom 203.0.113.10:8080 i user123:pass456. U standardnom Chrome prozoru slučaj 407 se ne pretvara u grešku tunela; Chrome umjesto toga otvara prozor za prijavu s korisničkim imenom i lozinkom za proxy. Greške tunela uzrokovane kodom 407 se stoga uglavnom javljaju u alatima za automatizaciju i u aplikacijama koje ne mogu zatražiti unos lozinke.
| Proxy na CONNECT odgovara sa | Chrome prikazuje | curl prikazuje |
|---|---|---|
407 bez mogućnosti unosa lozinke (headless Chrome) | ERR_TUNNEL_CONNECTION_FAILED | curl: (56) CONNECT tunnel failed, response 407 |
502 jer proxy ne može doći do stranice | ERR_TUNNEL_CONNECTION_FAILED | curl: (56) CONNECT tunnel failed, response 502 |
Uzroci, od najvjerovatnijih
- Skripta za automatizaciju ne šalje pristupne podatke. Chromeova zastavica
--proxy-serverprihvata samo host i port, a ne user:pass. Headless Puppeteer ili Selenium dobijaju 407 i prijavljuju neuspjeh tunela. - Aplikacija na telefonu iza Wi-Fi proxyja zaštićenog lozinkom. Aplikacija nema dijalog za prijavu, pa HTTPS ne radi dok preglednik i dalje funkcioniše.
- Proxy ne može doći do cilja. Vraća 502 na CONNECT; 502 Bad Gateway stranica ovo detaljno obrađuje.
- Samo pojedine stranice ne rade. Ciljna stranica blokira pristup ili je nedostupna, dok druge stranice rade preko istog proxyja.
Otkrijte stvarni kod pomoću jedne curl komande
Pokrenite curl -v -x http://user123:[email protected]:8080 https://example.com sa svojim vrijednostima. Pogledajte liniju odmah iza > CONNECT example.com:443 HTTP/1.1: 407 znači da trebate pratiti vodič za 407; 502 ukazuje na odredište ili putanju iza proxyja. Ako radije ne koristite terminal, zalijepite liniju u provjeravač proxyja, koji za iste situacije prijavljuje auth failed (407) ili HTTP 502.
Rješenja po okruženjima
- Puppeteer: zadržite
--proxy-server=http://host:portpri pokretanju i pozovitepage.authenticate({ username, password })prije navigacije. Kompletan primjer nalazi se u vodiču za Puppeteer proxy. - Playwright: proslijedite
proxy: { server, username, password }prilikom pokretanja preglednika i Playwright će odgovoriti na 407 umjesto vas; pogledajte Playwright. - Selenium: Chrome ne prihvata user:pass u komandnoj liniji; vodič za Selenium prikazuje izvodljive opcije.
- Chrome na Windows-u: ako se dijalog za prijavu uopšte ne pojavi, provjerite blokira li ga neka proxy ekstenzija, a zatim pokušajte ponovo u prozoru bez ekstenzija.
- Telefoni: za aplikacije kojima je potreban autentificirani proxy, koristite proxy aplikaciju koja podržava user:pass kao što je opisano u vodiču za postavljanje na Androidu.
Korak po korak
- 1
Identifikujte CONNECT odgovor
Pokrenite
curl -v -xsa svojom linijom proxyja ili je zalijepite u provjeravač kako biste saznali vraća li proxy 407 ili 502. - 2
Za 407: ispravno unesite pristupne podatke
U skriptama koristite autentifikacijski hook biblioteke umjesto stavljanja user:pass u
--proxy-server. - 3
Za 502: isprobajte drugu stranicu
Učitajte veliku stranicu kao što je example.com putem istog proxyja. Ako radi, problem je u prvobitnom odredištu.
- 4
Ponovo pokrenite i potvrdite izlazni IP
Nakon što se tunel otvori, posjetite moj IP u tom istom pregledniku kako biste potvrdili da promet ide preko proxyja.
Često postavljana pitanja
Zašto se http stranice učitavaju dok https stranice ne rade?
Obični http ne zahtijeva CONNECT; proxy direktno prosljeđuje zahtjev. Samo https otvara tunel, pa se greške tunela pojavljuju isključivo tu.
Šta uzrokuje ERR_TUNNEL_CONNECTION_FAILED na Androidu?
Najčešće aplikacija koja ne može proslijediti korisničko ime i lozinku na Wi-Fi proxy. Pokušajte otvoriti istu stranicu u Chromeu za Android; ako Chrome može zatražiti podatke i učitati stranicu, problem je u aplikaciji.
Mogu li staviti user:pass unutar --proxy-server?
Ne. Chrome ignoriše pristupne podatke u toj zastavici, što dovodi do koda 407 i greške tunela. Umjesto toga, izvršite autentifikaciju putem Puppeteera, Playwrighta ili ekstenzije.
Hoće li prelazak na SOCKS5 ukloniti grešku tunela?
Samo ako vaša narudžba glasi na SOCKS5. VinaProxy nudi i HTTP(S) i SOCKS5; odaberite protokol koji je naveden za vašu narudžbu na kontrolnoj tabli, jer nepodudaranje uzrokuje drugačije greške.
Proxyji koji rade s Puppeteerom i Playwrightom
VinaProxy proxyji koriste standardnu user:pass prijavu koju popularne biblioteke za automatizaciju podržavaju bez dodatnih podešavanja.
Pogledajte cijene