Як виправити 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 |
Причини за ймовірністю виникнення
- Скрипт автоматизації не передає облікові дані. Прапорець Chrome
--proxy-serverприймає лише хост і порт, без 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, яку популярні бібліотеки автоматизації підтримують із коробки.
Переглянути ціни