Szybka odpowiedź
Co oznacza ERR_TUNNEL_CONNECTION_FAILED w kontekście proxy?
net::ERR_TUNNEL_CONNECTION_FAILED oznacza, że Chrome poprosił proxy o otwarcie tunelu do strony HTTPS, ale proxy nie odpowiedziało 200 Connection established. Przeglądarka ukrywa prawdziwy status. Przy CrawlRelay residential proxies zwykle brak danych uwierzytelniających w Playwright lub Puppeteer, potem cel niedostępny dla bramki. Odtwórz z curl -v, by zobaczyć prawdziwy kod.
ERR_TUNNEL_CONNECTION_FAILED w skrócie
| Błąd | ERR_TUNNEL_CONNECTION_FAILED |
|---|---|
| Typ | Błąd sieci Chromium |
| Wysłane przez | Twoja przeglądarka, po odmowie lub niepowodzeniu żądania CONNECT przez proxy |
| Zdefiniowano w | CONNECT method: RFC 9110, section 9.3.6 |
| Spróbować ponownie? | Dopiero po odkryciu faktycznego statusu za tym błędem |
| Najpierw sprawdź | Odtwórz z curl -v, by zobaczyć rzeczywisty status CONNECT |
Co oznacza ERR_TUNNEL_CONNECTION_FAILED?
Aby załadować stronę HTTPS przez HTTP proxy, przeglądarka najpierw wysyła CONNECT host:443. Jeśli proxy odpowie 200, przeglądarka zaczyna TLS w tunelu. Każda inna odpowiedź, np. 407, 403 lub 502, kończy próbę, a Chromium zgłasza ogólny błąd.
Dlatego ten błąd wskazuje miejsce awarii - tunel, ale nie powód. Powodem jest status proxy, który zobaczysz curl.
Jak wygląda ERR_TUNNEL_CONNECTION_FAILED w Python, curl, Node.js i przeglądarkach?
Ten sam błąd wyświetla się inaczej w każdym narzędziu. Oto komunikaty, które warto wyszukać w logach:
- Playwright:
page.goto: net::ERR_TUNNEL_CONNECTION_FAILED at https://... - Puppeteer:
Error: net::ERR_TUNNEL_CONNECTION_FAILED at https://... - Pasek adresu Chrome: 'Nie można uzyskać dostępu do tej witryny' z kodem
ERR_TUNNEL_CONNECTION_FAILED - Selenium z Chrome: ten sam kod wewnątrz
WebDriverException
Co powoduje ERR_TUNNEL_CONNECTION_FAILED?
Najczęściej na początku:
- Brak przesłanych danych logowania (ukryty 407). Chrome ignoruje nazwę użytkownika i hasło w
--proxy-server. - Odmowa dostępu (ukryty 403), np. kategoria zablokowana przez politykę użycia proxy.
- Nieosiągalny cel (ukryty 502 lub 504): martwy host, literówka lub błąd DNS na wyjściu.
- Zły port: skierowanie przeglądarki na port SOCKS5 jak na HTTP lub odwrotnie.
Jak krok po kroku zdiagnozować ERR_TUNNEL_CONNECTION_FAILED?
- Uruchom ten sam URL przez curl z
-v(polecenie poniżej) i odczytaj linię poCONNECT. 407oznacza dane uwierzytelniające;403odmowę dostępu;502lub504cel lub wyjście.- Potwierdź, że przeglądarka korzysta z portu HTTP dla serwera proxy
http://. - Przetestuj prostą stronę, np.
https://api.ipify.org, zanim przejdziesz do rzeczywistego celu.
# Use the URL that fails; with https://api.ipify.org instead, you test the gateway alone.
# "HTTP/1.1 200 Connection established" first, then the site's own status: the site answered.
curl -v -x http://USERNAME:[email protected]:7777 https://TARGET_URL
# Same test through the SOCKS5 port, with DNS resolved at the exit
curl -v --socks5-hostname gw.crawlrelay.com:7778 --proxy-user USERNAME:PASSWORD https://TARGET_URLJak naprawić ERR_TUNNEL_CONNECTION_FAILED?
- Playwright: użyj
server,usernameipasswordw opcjiproxy, dla przeglądarki lub kontekstu. Zobacz instrukcję Playwright. - Puppeteer: uruchom z
--proxy-server=http://host:porti wywołajpage.authenticate()przed pierwszymgoto. Zobacz instrukcję Puppeteer. - Selenium: uruchom lokalny forwarder dodający dane uwierzytelniające. Zobacz instrukcję Selenium.
- Sprawdź cel względem naszej Polityki akceptowalnego użycia.
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch(proxy={
"server": "http://gw.crawlrelay.com:7777",
"username": "USERNAME-country-us",
"password": "PASSWORD",
})
page = browser.new_page()
response = page.goto("https://api.ipify.org")
print(response.status, page.inner_text("body"))
browser.close()Czy warto ponawiać próbę po ERR_TUNNEL_CONNECTION_FAILED?
Ponów próbę tylko jeśli znasz ukryty status. Ukryty 407 lub 403 będzie powtarzany w nieskończoność; popraw konfigurację. Ukryty 502 lub 504 można ponowić na nowym wyjściu, jak każdy błąd bramki.
Jak ERR_TUNNEL_CONNECTION_FAILED odnosi się do CrawlRelay?
Port HTTP CrawlRelay obsługuje HTTPS przez tunele CONNECT, które wspiera każde narzędzie oparte na Chromium. Używaj portu HTTP dla przeglądarek: Chromium nie obsługuje SOCKS5 z nazwą użytkownika i hasłem.
Gateway: gw.crawlrelay.com, port 7777 (HTTP, HTTPS przez CONNECT) i port 7778 (SOCKS5). Format nazwy użytkownika: USERNAME-country-{cc}-state-{state}-city-{city}-zip-{zip}-asn-{asn}-session-{id}-ttl-{minutes}. Powiązane: 407 Proxy Authentication Required · ERR_PROXY_CONNECTION_FAILED · Instrukcja Playwright.
ERR_TUNNEL_CONNECTION_FAILED: pytania, które zadają deweloperzy
Dlaczego curl działa, a Playwright pokazuje ERR_TUNNEL_CONNECTION_FAILED?
Ponieważ curl przesyła dane logowania z URL proxy, a Chromium ignoruje dane logowania wpisane w adres serwera proxy. W Playwright podaj username i password jako oddzielne pola w opcji proxy. W Puppeteer wywołaj page.authenticate() przed nawigacją.
Czy mogę używać proxy SOCKS5 z uwierzytelnianiem w Chrome?
Nie bezpośrednio. Chromium obsługuje proxy SOCKS5, ale nie SOCKS5 z uwierzytelnianiem przez nazwę użytkownika i hasło. Zamiast tego użyj portu HTTP bramki, który obsługuje HTTPS przez tunele CONNECT, lub uruchom lokalny forwarder uwierzytelniający przeglądarkę.
Czy ERR_TUNNEL_CONNECTION_FAILED jest spowodowany przez stronę internetową?
Rzadko bezpośrednio. Tunel jest między przeglądarką a proxy, więc błąd pojawia się zanim strona internetowa zobaczy handshake TLS. Strona może być pośrednią przyczyną, gdy jest niedostępna, a proxy odpowiada 502 lub 504 na żądanie CONNECT.
Inne błędy proxy w tym odniesieniu
Kody statusu HTTP
- 401 Unauthorized vs 407
- 403 Forbidden
- 407 Proxy Authentication Required
- 429 Too Many Requests
- 502 Bad Gateway
- 503 Service Unavailable
- 504 Gateway Timeout
Błędy w przeglądarce i kliencie
Błędy połączenia i TLS
Proxy rezydencjalne z dokumentacją opisującą przypadki błędów
CrawlRelay proxy rezydencjalne od 0,50 USD/GB, ruch, który nigdy nie wygasa.