ERR_TUNNEL_CONNECTION_FAILED klaidos taisymas naudojant proxy
Updated:
Norėdama įkelti https:// puslapį per proxy, naršyklė siunčia CONNECT užklausą ir laukia, kol proxy atvers tunelį į svetainę. ERR_TUNNEL_CONNECTION_FAILED rodoma tada, kai proxy į šią užklausą atsako klaida, o ne patvirtinimu. Sunkumas tas, kad Chrome nenurodo, kokia tai klaida, todėl pirmiausia reikia išsiaiškinti tikrąjį kodą.
Du mūsų atkurti atvejai
Abu atvejai buvo išbandyti su bandomuoju proxy, čia pateiktu su dokumentaciniu adresu 203.0.113.10:8080 ir user123:pass456. Įprastame Chrome lange 407 klaida netampa tunelio klaida – vietoje to Chrome atidaro prisijungimo langą proxy naudotojo vardui ir slaptažodžiui įvesti. Todėl tunelio klaidos dėl 407 kodo dažniausiai pasitaiko automatizavimo įrankiuose ir programose, kurios negali pateikti užklausos slaptažodžiui įvesti.
| Proxy atsakas į CONNECT | Chrome rodo | curl rodo |
|---|---|---|
407 be galimybės įvesti slaptažodį (headless Chrome) | ERR_TUNNEL_CONNECTION_FAILED | curl: (56) CONNECT tunnel failed, response 407 |
502, nes proxy negali pasiekti svetainės | ERR_TUNNEL_CONNECTION_FAILED | curl: (56) CONNECT tunnel failed, response 502 |
Priežastys, pradedant labiausiai tikėtinomis
- Automatizavimo scenarijus neperduoda prisijungimo duomenų. Chrome vėliavėlė
--proxy-serverpriima tik serverio adresą ir prievadą, bet ne user:pass. „Headless“ Puppeteer arba Selenium gauna 407 ir praneša apie tunelio klaidą. - Telefono programėlė naudoja slaptažodžiu apsaugotą „Wi-Fi“ proxy. Programėlė neturi prisijungimo lango, todėl HTTPS ryšys nutrūksta, nors naršyklė tebeveikia.
- Proxy negali pasiekti tikslo. Į CONNECT atsakoma 502 kodu; tai išsamiai paaiškinta 502 Bad Gateway puslapyje.
- Neveikia tik kai kurios svetainės. Tikslinė svetainė blokuoja užklausas arba yra nepasiekiama, nors kitos svetainės per tą patį proxy veikia.
Sužinokite tikrąjį kodą viena curl komanda
Paleiskite curl -v -x http://user123:[email protected]:8080 https://example.com su savo reikšmėmis. Pažiūrėkite į eilutę iškart po > CONNECT example.com:443 HTTP/1.1: 407 reiškia, kad reikia vadovautis 407 gidu; 502 rodo problemą tikslinėje svetainėje arba maršrute už proxy. Jei nenorite naudoti terminalo, įklijuokite eilutę į proxy tikrintuvą, kuris tokiose situacijose pateikia pranešimą auth failed (407) arba HTTP 502.
Sprendimai pagal aplinką
- Puppeteer: paleidžiant palikite
--proxy-server=http://host:portir prieš naršydami iškvieskitepage.authenticate({ username, password }). Išsamų pavyzdį rasite Puppeteer proxy gide. - Playwright: paleisdami naršyklę perduokite
proxy: { server, username, password }, ir Playwright pats atsakys į 407 užklausą; žr. Playwright. - Selenium: Chrome nepriima user:pass komandų eilutėje; veikiančius variantus rasite Selenium gide.
- Chrome sistemoje Windows: jei prisijungimo langas nepasirodo, patikrinkite, ar jo neblokuoja proxy plėtinys, ir pabandykite iš naujo lange be plėtinių.
- Telefonai: programėlėms, kurioms reikalingas autentifikuotas proxy, naudokite proxy programėlę su user:pass palaikymu, kaip aprašyta Android nustatymo gide.
Žingsnis po žingsnio
- 1
Nustatykite CONNECT atsaką
Paleiskite
curl -v -xsu savo proxy duomenimis arba įklijuokite eilutę į tikrintuvą, kad sužinotumėte, ar proxy grąžina 407, ar 502. - 2
Dėl 407: teisingai pateikite prisijungimo duomenis
Scenarijuose naudokite bibliotekos autentifikavimo funkciją, užuot nurodę user:pass parametre
--proxy-server. - 3
Dėl 502: išbandykite kitą svetainę
Per tą patį proxy atidarykite didelę svetainę, pavyzdžiui, example.com. Jei ji veikia, problema yra pirminėje tikslinėje svetainėje.
- 4
Paleiskite iš naujo ir patikrinkite išėjimo IP
Kai tunelis atsivers, toje pačioje naršyklėje apsilankykite puslapyje mano IP ir įsitikinkite, kad srautas nukreipiamas per proxy.
Dažnai užduodami klausimai
Kodėl http puslapiai atsidaro, o https – ne?
Paprastam http protokolo ryšiui CONNECT nereikalingas – proxy nukreipia užklausą tiesiogiai. Tunelis atveriamas tik naudojant https, todėl tunelio klaidos pasitaiko tik ten.
Kas sukelia ERR_TUNNEL_CONNECTION_FAILED sistemoje Android?
Dažniausiai tai programėlė, kuri negali perduoti naudotojo vardo ir slaptažodžio „Wi-Fi“ proxy. Pabandykite atidaryti tą patį puslapį naudodami Chrome programėlę Android sistemoje; jei Chrome paprašo duomenų ir puslapį atveria, problema slypi programėlėje.
Ar galiu įrašyti user:pass į --proxy-server?
Ne. Chrome nepaiso šioje vėliavėlėje nurodytų prisijungimo duomenų, todėl kyla 407 klaida ir atsiranda tunelio triktis. Vietoj to autentifikuokitės per Puppeteer, Playwright arba plėtinį.
Ar perjungimas į SOCKS5 pašalins tunelio klaidą?
Tik tuo atveju, jei jūsų užsakymas yra SOCKS5. VinaProxy siūlo ir HTTP(S), ir SOCKS5; valdymo skydelyje pasirinkite savo užsakymą atitinkantį protokolą, nes nesutapimas sukelia kitas klaidas.
Proxy serveriai, suderinami su Puppeteer ir Playwright
VinaProxy proxy naudoja standartinį user:pass prisijungimą, kurį populiarios automatizavimo bibliotekos palaiko iš karto be papildomų nustatymų.
Žiūrėti kainas