Jak naprawić ERR_TUNNEL_CONNECTION_FAILED z proxy
Updated:
Aby załadować stronę https:// przez proxy, przeglądarka wysyła żądanie CONNECT i czeka, aż serwer proxy otworzy tunel do witryny. ERR_TUNNEL_CONNECTION_FAILED pojawia się, gdy proxy odpowiada na to żądanie błędem zamiast je zaakceptować. Problem w tym, że Chrome nie informuje, o jaki błąd chodzi, dlatego pierwszym krokiem jest ustalenie rzeczywistego kodu.
Dwa przypadki, które odtworzyliśmy
Oba testy wykonano przy użyciu testowego serwera proxy, zapisanego tutaj za pomocą przykładowego adresu z dokumentacji: 203.0.113.10:8080 oraz user123:pass456. W zwykłym oknie Chrome błąd 407 nie wywołuje błędu tunelu – zamiast tego Chrome otwiera okno logowania z pytaniem o nazwę użytkownika i hasło do proxy. Błędy tunelowania wywołane kodem 407 pojawiają się więc głównie w narzędziach do automatyzacji oraz w aplikacjach, które nie potrafią wyświetlić monitu o hasło.
| Proxy odpowiada na CONNECT kodem | Chrome wyświetla | curl wyświetla |
|---|---|---|
407 bez możliwości podania hasła (headless Chrome) | ERR_TUNNEL_CONNECTION_FAILED | curl: (56) CONNECT tunnel failed, response 407 |
502, ponieważ proxy nie może połączyć się ze stroną | ERR_TUNNEL_CONNECTION_FAILED | curl: (56) CONNECT tunnel failed, response 502 |
Przyczyny – od najbardziej prawdopodobnych
- Skrypt automatyzacji nie przekazuje danych uwierzytelniających. Flaga
--proxy-serverw Chrome akceptuje wyłącznie host i port, a nie user:pass. Działający w trybie headless Puppeteer lub Selenium otrzymuje kod 407 i zgłasza błąd tunelu. - Aplikacja w telefonie działająca za proxy Wi-Fi chronionym hasłem. Aplikacja nie wyświetla okna logowania, przez co połączenia HTTPS zawodzą, mimo że przeglądarka nadal działa.
- Proxy nie może nawiązać połączenia z serwerem docelowym. Zwraca kod 502 na żądanie CONNECT; szczegółowo opisuje to strona błędu 502 Bad Gateway.
- Problem występuje tylko na niektórych stronach. Serwer docelowy blokuje ruch lub nie działa, podczas gdy inne witryny otwierają się poprawnie przez to samo proxy.
Sprawdź prawdziwy kod za pomocą jednego polecenia curl
Uruchom curl -v -x http://user123:[email protected]:8080 https://example.com, wstawiając własne parametry. Sprawdź wiersz znajdujący się tuż po > CONNECT example.com:443 HTTP/1.1: kod 407 oznacza konieczność przejścia do poradnika dotyczącego 407, a 502 wskazuje na problem z serwerem docelowym lub trasą za proxy. Jeśli wolisz uniknąć terminala, wklej te dane do testera proxy, który w identycznych sytuacjach wyświetla auth failed (407) lub HTTP 502.
Rozwiązania w zależności od środowiska
- Puppeteer: podczas uruchamiania zachowaj parametr
--proxy-server=http://host:porti wywołajpage.authenticate({ username, password })przed nawigacją. Pełny przykład znajdziesz w poradniku proxy dla Puppeteer. - Playwright: przekaż parametr
proxy: { server, username, password }podczas uruchamiania przeglądarki, a Playwright automatycznie obsłuży kod 407; zobacz Playwright. - Selenium: Chrome nie przyjmuje danych user:pass w wierszu poleceń; sprawdzone rozwiązania znajdziesz w poradniku Selenium.
- Chrome w Windows: jeśli okno logowania w ogóle się nie pojawia, sprawdź, czy nie blokuje go rozszerzenie proxy, a następnie ponów próbę w oknie bez rozszerzeń.
- Smartfony: w przypadku aplikacji wymagających uwierzytelnionego proxy skorzystaj z aplikacji proxy obsługującej user:pass, zgodnie z poradnikiem konfiguracji dla systemu Android.
Krok po kroku
- 1
Zidentyfikuj odpowiedź na CONNECT
Uruchom polecenie
curl -v -xz parametrami swojego proxy lub wklej je do testera, aby dowiedzieć się, czy proxy zwraca kod 407 czy 502. - 2
Dla 407: przekaż dane logowania we właściwy sposób
W skryptach korzystaj z wbudowanego mechanizmu uwierzytelniania w danej bibliotece zamiast umieszczać user:pass w parametrze
--proxy-server. - 3
Dla 502: sprawdź inną stronę
Załaduj popularną witrynę, taką jak example.com, przez to samo proxy. Jeśli działa, problem tkwi w pierwotnym adresie docelowym.
- 4
Uruchom ponownie i potwierdź wyjściowy adres IP
Gdy tunel zostanie otwarty, odwiedź stronę moje IP w tej samej przeglądarce, aby potwierdzić, że ruch przechodzi przez proxy.
Często zadawane pytania
Dlaczego strony http się ładują, a https nie działają?
Zwykły protokół http nie wymaga żądania CONNECT; proxy przekazuje zapytanie bezpośrednio. Tylko https otwiera tunel, dlatego błędy tunelowania występują wyłącznie w tym przypadku.
Co powoduje błąd ERR_TUNNEL_CONNECTION_FAILED na Androidzie?
Najczęściej aplikacja, która nie potrafi przekazać nazwy użytkownika i hasła do serwera proxy w sieci Wi-Fi. Spróbuj otworzyć tę samą stronę w Chrome na Androidzie – jeśli Chrome wyświetli monit i załaduje stronę, problem leży po stronie aplikacji.
Czy mogę podać user:pass wewnątrz --proxy-server?
Nie. Chrome ignoruje dane logowania w tej fladze, co prowadzi do kodu 407 i błędu tunelu. Zamiast tego uwierzytelnij się za pomocą Puppeteera, Playwrighta lub rozszerzenia.
Czy zmiana na SOCKS5 usunie błąd tunelu?
Tylko wtedy, gdy Twoje zamówienie obejmuje SOCKS5. VinaProxy oferuje zarówno HTTP(S), jak i SOCKS5; wybierz protokół przypisany do zamówienia w panelu klienta, ponieważ niezgodność wywoła inne błędy.
Proxy kompatybilne z Puppeteerem i Playwrightem
Serwery proxy VinaProxy korzystają ze standardowego logowania user:pass, które popularne biblioteki do automatyzacji obsługują natywnie.
Zobacz cennik