Trả lời nhanh
ERR_TUNNEL_CONNECTION_FAILED nghĩa là gì với proxy?
net::ERR_TUNNEL_CONNECTION_FAILED nghĩa là Chrome yêu cầu proxy mở tunnel cho site HTTPS nhưng proxy không trả lời 200 Connection established. Trình duyệt ẩn trạng thái thật. Với proxy residential CrawlRelay, nguyên nhân thường do thiếu chứng thực trong Playwright hoặc Puppeteer, rồi đến mục tiêu gateway không tới được. Dùng curl -v để xem mã thực.
ERR_TUNNEL_CONNECTION_FAILED nhìn nhanh
| Lỗi | ERR_TUNNEL_CONNECTION_FAILED |
|---|---|
| Loại | Lỗi mạng Chromium |
| Gửi bởi | Trình duyệt của bạn, sau khi proxy từ chối hoặc lỗi yêu cầu CONNECT |
| Định nghĩa tại | CONNECT method: RFC 9110, section 9.3.6 |
| Thử lại? | Chỉ sau khi biết được trạng thái thực sự ở phía sau |
| Kiểm tra trước tiên | Dùng curl -v để tái hiện và xem trạng thái thật của CONNECT |
ERR_TUNNEL_CONNECTION_FAILED nghĩa là gì?
Để tải trang HTTPS qua proxy HTTP, trình duyệt gửi CONNECT host:443 trước. Nếu proxy trả 200, trình duyệt bắt đầu TLS trong tunnel. Mọi phản hồi khác như 407, 403 hay 502 kết thúc cố gắng, và Chromium báo lỗi chung.
Do vậy lỗi này chỉ xác định được vị trí lỗi là tunnel, không cho biết nguyên nhân. Nguyên nhân là mã trạng thái proxy gửi, bạn có thể xem với curl.
ERR_TUNNEL_CONNECTION_FAILED trông như thế nào trong Python, curl, Node.js và trình duyệt?
Cùng một lỗi nhưng hiển thị khác nhau trên mỗi công cụ. Đây là các thông báo bạn nên tìm trong nhật ký của mình:
- Playwright:
page.goto: net::ERR_TUNNEL_CONNECTION_FAILED at https://... - Puppeteer:
Error: net::ERR_TUNNEL_CONNECTION_FAILED at https://... - Thanh địa chỉ Chrome: 'Không thể truy cập trang web này' với mã
ERR_TUNNEL_CONNECTION_FAILED - Selenium với Chrome: cùng mã đó trong
WebDriverException
Nguyên nhân gây ra ERR_TUNNEL_CONNECTION_FAILED là gì?
Khả năng đầu tiên là:
- Không gửi thông tin đăng nhập (407 ẩn). Chrome bỏ qua tên đăng nhập và mật khẩu trong
--proxy-server. - Đích đến bị từ chối (403 ẩn), ví dụ một mục bị cấm theo chính sách sử dụng proxy.
- Đích không thể truy cập (502 hoặc 504 ẩn): máy chủ chết, lỗi chính tả hay lỗi DNS ở nút ra.
- Cổng sai: trỏ trình duyệt đến cổng SOCKS5 như là HTTP, hoặc ngược lại.
Làm sao để chẩn đoán ERR_TUNNEL_CONNECTION_FAILED từng bước?
- Chạy cùng URL bằng curl với
-v(lệnh bên dưới) và đọc dòng sauCONNECT. 407nghĩa là thông tin đăng nhập;403là đích đến bị từ chối;502hoặc504là đích hoặc nút ra lỗi.- Xác nhận trình duyệt dùng cổng HTTP cho máy chủ
http://. - Thử trang đơn giản như
https://api.ipify.orgtrước khi đến đích thật.
# 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_URLLàm sao để sửa ERR_TUNNEL_CONNECTION_FAILED?
- Playwright: truyền
server,usernamevàpasswordtrong tùy chọnproxy, theo trình duyệt hoặc ngữ cảnh. Xem hướng dẫn Playwright. - Puppeteer: khởi chạy với
--proxy-server=http://host:portvà gọipage.authenticate()trước lần gọigotođầu tiên. Xem hướng dẫn Puppeteer. - Selenium: chạy một trình chuyển tiếp cục bộ nhỏ để thêm thông tin đăng nhập. Xem hướng dẫn Selenium.
- Kiểm tra đích tới theo Chính sách Sử dụng Chấp nhận được.
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()Có nên thử lại sau ERR_TUNNEL_CONNECTION_FAILED không?
Chỉ thử lại khi bạn biết trạng thái ẩn. 407 hoặc 403 ẩn sẽ lặp vô hạn; sửa cấu hình. 502 hoặc 504 ẩn có thể thử lại trên nút ra mới, như lỗi cổng thông thường.
ERR_TUNNEL_CONNECTION_FAILED áp dụng thế nào với CrawlRelay?
Cổng HTTP của CrawlRelay truyền HTTPS qua các đường hầm CONNECT mà mọi công cụ dựa trên Chromium đều hỗ trợ. Dùng cổng HTTP cho trình duyệt: Chromium không hỗ trợ SOCKS5 có tên đăng nhập và mật khẩu.
Gateway: gw.crawlrelay.com, cổng 7777 (HTTP, HTTPS qua CONNECT) và cổng 7778 (SOCKS5). Định dạng tên người dùng: USERNAME-country-{cc}-state-{state}-city-{city}-zip-{zip}-asn-{asn}-session-{id}-ttl-{minutes}. Tham khảo liên quan: 407 Yêu cầu Xác thực Proxy · ERR_PROXY_CONNECTION_FAILED · Hướng dẫn Playwright.
ERR_TUNNEL_CONNECTION_FAILED: các câu hỏi thường gặp của lập trình viên
Tại sao curl chạy được mà Playwright báo ERR_TUNNEL_CONNECTION_FAILED?
Bởi vì curl gửi thông tin đăng nhập từ URL proxy, trong khi Chromium bỏ qua thông tin đăng nhập trong địa chỉ máy chủ proxy. Trong Playwright, truyền username và password làm riêng biệt trong tùy chọn proxy. Trong Puppeteer, gọi page.authenticate() trước khi điều hướng.
Tôi có dùng proxy SOCKS5 với xác thực trong Chrome được không?
Không trực tiếp. Chromium hỗ trợ proxy SOCKS5 nhưng không hỗ trợ xác thực tên đăng nhập và mật khẩu cho SOCKS5. Dùng cổng HTTP của gateway thay thế, cổng này xử lý các trang HTTPS qua đường hầm CONNECT hoặc chạy trình chuyển tiếp cục bộ xác thực cho trình duyệt.
ERR_TUNNEL_CONNECTION_FAILED có phải do trang web gây ra?
Hiếm khi trực tiếp. Đường hầm là giữa trình duyệt và proxy, nên lỗi xảy ra trước khi trang web nhìn thấy quá trình bắt tay TLS. Trang web có thể là nguyên nhân gián tiếp khi không truy cập được và proxy đáp ứng 502 hoặc 504 cho yêu cầu CONNECT.
Các lỗi proxy khác trong tài liệu tham khảo này
Mã trạng thái HTTP
- 401 Unauthorized vs 407
- 403 Forbidden
- 407 Proxy Authentication Required
- 429 Too Many Requests
- 502 Bad Gateway
- 503 Service Unavailable
- 504 Gateway Timeout
Lỗi trình duyệt và client
Lỗi kết nối và TLS
Proxy dân cư với tài liệu bao gồm các trường hợp lỗi
CrawlRelay proxy dân cư từ 0,50 US$/GB, lưu lượng không bao giờ hết hạn.