Membaiki ERR_TUNNEL_CONNECTION_FAILED dengan proksi
Updated:
Untuk memuatkan halaman https:// melalui proksi, pelayar menghantar permintaan CONNECT dan menunggu proksi membuka terowong ke laman web tersebut. ERR_TUNNEL_CONNECTION_FAILED muncul apabila proksi membalas permintaan itu dengan ralat dan bukannya bersetuju. Masalahnya, Chrome tidak memberitahu anda ralat yang mana satu, jadi langkah pertama adalah mencari kod sebenar.
Dua kes yang kami hasilkan semula
Kedua-duanya diuji pada proksi percubaan, ditulis semula di sini dengan alamat dokumentasi 203.0.113.10:8080 dan user123:pass456. Dalam tetingkap Chrome biasa, kes 407 tidak menjadi ralat terowong; sebaliknya Chrome membuka kotak dialog log masuk untuk nama pengguna dan kata laluan proksi. Oleh itu, ralat terowong yang disebabkan oleh 407 kebanyakannya berlaku dalam alat automasi dan aplikasi yang tidak boleh memaparkan permintaan kata laluan.
| Proksi membalas CONNECT dengan | Chrome memaparkan | curl memaparkan |
|---|---|---|
407 tanpa cara memasukkan kata laluan (headless Chrome) | ERR_TUNNEL_CONNECTION_FAILED | curl: (56) CONNECT tunnel failed, response 407 |
502 kerana proksi tidak dapat mencapai laman web | ERR_TUNNEL_CONNECTION_FAILED | curl: (56) CONNECT tunnel failed, response 502 |
Punca, mengikut kebarangkalian tertinggi dahulu
- Skrip automasi tidak menghantar kelayakan. Bendera
--proxy-serverChrome hanya menerima hos dan port, bukan user:pass. Puppeteer atau Selenium headless menerima 407 lalu melaporkan kegagalan terowong. - Aplikasi telefon di sebalik proksi Wi-Fi yang dilindungi kata laluan. Aplikasi tiada dialog log masuk, jadi HTTPS gagal manakala pelayar masih berfungsi.
- Proksi tidak dapat mencapai sasaran. Ia membalas 502 kepada CONNECT; halaman 502 Bad Gateway menerangkan perkara ini secara mendalam.
- Hanya sesetengah laman web gagal. Laman destinasi menyekat capaian atau tergendala manakala laman web lain berfungsi melalui proksi yang sama.
Cari kod sebenar dengan satu arahan curl
Jalankan curl -v -x http://user123:[email protected]:8080 https://example.com dengan nilai anda sendiri. Perhatikan baris sejurus selepas > CONNECT example.com:443 HTTP/1.1: 407 bermakna anda perlu merujuk panduan 407; 502 pula menunjukkan masalah pada destinasi atau laluan di belakang proksi. Jika anda tidak mahu menggunakan terminal, tampal baris tersebut ke dalam penyemak proksi, yang akan melaporkan auth failed (407) atau HTTP 502 bagi situasi yang sama.
Penyelesaian mengikut persekitaran
- Puppeteer: kekalkan
--proxy-server=http://host:portsemasa pelancaran dan panggilpage.authenticate({ username, password })sebelum menavigasi. Contoh lengkap dalam panduan proksi Puppeteer. - Playwright: sertakan
proxy: { server, username, password }semasa melancarkan pelayar dan Playwright akan menguruskan 407 untuk anda; lihat Playwright. - Selenium: Chrome tidak menerima user:pass pada baris arahan; panduan Selenium menunjukkan pilihan alternatif yang boleh digunakan.
- Chrome pada Windows: jika dialog log masuk tidak dipaparkan, semak sama ada sambungan proksi menyekatnya, kemudian cuba semula dalam tetingkap tanpa sambungan.
- Telefon: bagi aplikasi yang memerlukan proksi dengan pengesahan, gunakan aplikasi proksi yang menyokong user:pass seperti dalam panduan persediaan Android.
Langkah demi langkah
- 1
Kenal pasti respons CONNECT
Jalankan
curl -v -xdengan baris proksi anda, atau tampalkannya ke dalam penyemak, untuk mengetahui sama ada proksi membalas 407 atau 502. - 2
Untuk 407: masukkan kelayakan dengan betul
Dalam skrip, gunakan cangkuk pengesahan pustaka dan elakkan daripada meletakkan user:pass dalam
--proxy-server. - 3
Untuk 502: cuba laman web lain
Muatkan laman web besar seperti example.com melalui proksi yang sama. Jika ia berjaya dimuatkan, masalah berpunca daripada destinasi asal.
- 4
Jalankan semula dan sahkan IP keluar
Sebaik sahaja terowong dibuka, layari IP saya dalam pelayar yang sama untuk mengesahkan bahawa trafik melalui proksi.
Soalan lazim
Mengapakah halaman http boleh dimuatkan sedangkan halaman https gagal?
Halaman http biasa tidak memerlukan CONNECT; proksi memajukan permintaan secara terus. Hanya https yang membuka terowong, jadi ralat terowong hanya muncul pada protokol tersebut.
Apakah punca ERR_TUNNEL_CONNECTION_FAILED pada Android?
Kebanyakannya disebabkan oleh aplikasi yang tidak dapat menghantar nama pengguna dan kata laluan ke proksi Wi-Fi. Cuba buka laman yang sama dalam Chrome untuk Android; jika Chrome meminta log masuk dan memuatkannya, puncanya adalah aplikasi tersebut.
Bolehkah saya meletakkan user:pass di dalam --proxy-server?
Tidak. Chrome mengabaikan kelayakan dalam bendera itu, menyebabkan ralat 407 dan kegagalan terowong. Sebaliknya, sahkan kelayakan melalui Puppeteer, Playwright atau sambungan pelayar.
Adakah beralih kepada SOCKS5 akan menyelesaikan ralat terowong?
Hanya jika pesanan anda adalah untuk SOCKS5. VinaProxy menyediakan kedua-dua HTTP(S) dan SOCKS5; pilih protokol yang tertera pada pesanan anda di papan pemuka kerana ketidakpadanan protokol akan menimbulkan ralat lain.
Proksi yang serasi dengan Puppeteer dan Playwright
Proksi VinaProxy menggunakan log masuk user:pass standard yang disokong secara terus oleh pustaka automasi popular.
Lihat harga