Выпраўленне ERR_TUNNEL_CONNECTION_FAILED пры працы з проксі
Updated:
Каб загрузіць старонку https:// праз проксі, браўзер адпраўляе запыт CONNECT і чакае, пакуль проксі адкрые тунэль да сайта. ERR_TUNNEL_CONNECTION_FAILED узнікае, калі проксі замест пацвярджэння адказвае на гэты запыт памылкай. Складанасць у тым, што Chrome не паведамляе, якая менавіта гэта памылка, таму перш за ўсё трэба высветліць сапраўдны код.
Два выпадкі, якія мы прайгралі
Абодва тэсты праводзіліся на тэставым проксі, пазначаным тут дакументацыйным адрасам 203.0.113.10:8080 і user123:pass456. У звычайным акне Chrome статус 407 не ператвараецца ў памылку тунэля: Chrome замест гэтага адкрывае акно аўтарызацыі для ўводу імя карыстальніка і пароля проксі. Таму памылкі тунэля, выкліканыя кодам 407, узнікаюць пераважна ў інструментах аўтаматызацыі і праграмах, якія не маюць магчымасці запытаць пароль.
| Проксі адказвае на CONNECT кодам | Chrome паказвае | curl паказвае |
|---|---|---|
407 без магчымасці ўвесці пароль (headless Chrome) | ERR_TUNNEL_CONNECTION_FAILED | curl: (56) CONNECT tunnel failed, response 407 |
502, бо проксі не можа злучыцца з сайтам | ERR_TUNNEL_CONNECTION_FAILED | curl: (56) CONNECT tunnel failed, response 502 |
Прычыны ў парадку верагоднасці
- Скрыпт аўтаматызацыі не адпраўляе ўліковыя даныя. Сцяг
--proxy-serverу Chrome прымае толькі хост і порт, але не user:pass. Headless Puppeteer або Selenium атрымлівае код 407 і паведамляе пра памылку тунэля. - Мабільная праграма працуе праз проксі Wi-Fi з паролем. У праграме няма акна ўваходу, таму HTTPS перастае працаваць, у той час як у браўзеры ўсё адкрываецца.
- Проксі не можа дасягнуць мэтавага сервера. Ён вяртае 502 на запыт CONNECT; гэта падрабязна разгледжана на старонцы 502 Bad Gateway.
- Памылка ўзнікае толькі на некаторых сайтах. Мэтавы сайт недаступны альбо блакуе злучэнне, тады як іншыя сайты працуюць праз гэты ж проксі.
Як даведацца сапраўдны код адной камандай curl
Выканайце curl -v -x http://user123:[email protected]:8080 https://example.com са сваімі данымі. Звярніце ўвагу на радок адразу пасля > CONNECT example.com:443 HTTP/1.1: код 407 паказвае на неабходнасць скарыстацца інструкцыяй па 407; код 502 сведчыць пра праблему з мэтавым сайтам або маршрутам за проксі. Калі вы не хочаце працаваць праз тэрмінал, устаўце гэты радок у чэкер проксі, які паведаміць пра auth failed (407) альбо HTTP 502 у аналагічных выпадках.
Спосабы выпраўлення для розных асяроддзяў
- Puppeteer: пакіньце
--proxy-server=http://host:portпры запуску і выклічцеpage.authenticate({ username, password })перад пераходам на старонку. Поўны прыклад глядзіце ў кіраўніцтве па проксі для Puppeteer. - Playwright: перадайце
proxy: { server, username, password }пры запуску браўзера, і Playwright сам апрацуе памылку 407; падрабязней у Playwright. - Selenium: Chrome не прымае user:pass праз камандны радок; працоўныя варыянты апісаны ў кіраўніцтве па Selenium.
- Chrome на Windows: калі акно аўтарызацыі не з'яўляецца, праверце, ці не блакуе яго пашырэнне для проксі, пасля чаго паспрабуйце зноў у акне без пашырэнняў.
- Тэлефоны: для праграм, якім патрабуецца проксі з аўтарызацыяй, выкарыстоўвайце спецыяльную праграму для проксі з падтрымкай user:pass, як апісана ў інструкцыі па наладзе Android.
Крок за крокам
- 1
Вызначце адказ на запыт CONNECT
Выканайце
curl -v -xса сваімі данымі проксі альбо ўстаўце радок у чэкер, каб даведацца, вяртае проксі 407 ці 502. - 2
Для 407: карэктна перадайце ўліковыя даныя
У скрыптах выкарыстоўвайце метад аўтэнтыфікацыі бібліятэкі замест перадачы user:pass у
--proxy-server. - 3
Для 502: паспрабуйце іншы сайт
Адкрыйце праз гэты ж проксі буйны сайт, напрыклад example.com. Калі ён працуе, праблема ў зыходным мэтавым рэсурсе.
- 4
Паўтарыце запыт і праверце выходны IP
Калі тунэль адкрыецца, перайдзіце на старонку мой IP у тым жа браўзеры, каб упэўніцца, што трафік ідзе праз проксі.
Частыя пытанні
Чаму старонкі http адкрываюцца, а https — не?
Для звычайнага http запыт CONNECT не патрэбны: проксі перасылае запыт наўпрост. Тунэль адкрываецца толькі для https, таму і памылкі тунэля ўзнікаюць толькі там.
Што выклікае ERR_TUNNEL_CONNECTION_FAILED на Android?
Часцей за ўсё — праграма, якая не можа перадаць імя карыстальніка і пароль проксі Wi-Fi. Паспрабуйце адкрыць тую ж старонку ў Chrome для Android: калі Chrome запытвае даныя і загружае сайт, справа ў праграме.
Ці можна пазначыць user:pass у параметры --proxy-server?
Не. Chrome ігнаруе ўліковыя даныя ў гэтым сцягу, што вядзе да 407 і памылкі тунэля. Замест гэтага наладзьце аўтэнтыфікацыю праз Puppeteer, Playwright або пашырэнне.
Ці дапаможа пераход на SOCKS5 пазбавіцца ад памылкі тунэля?
Толькі калі ваш заказ — SOCKS5. VinaProxy прапануе як HTTP(S), так і SOCKS5; выбірайце той пратакол, які пазначаны для вашага заказу ў панэлі кіравання, бо неадпаведнасць выклікае іншыя памылкі.
Проксі, якія працуюць з Puppeteer і Playwright
Проксі VinaProxy выкарыстоўваюць стандартную аўтарызацыю user:pass, якую папулярныя бібліятэкі аўтаматызацыі падтрымліваюць без дадатковых налад.
Глядзець тарыфы