Проксі з логіном у Puppeteer і Playwright: як передати і що означають помилки
Обидві бібліотеки керують браузером, а Chromium не бере логін і пароль з адреси проксі. Тому облікові дані передають окремо, і кожна бібліотека робить це по-своєму.
Оновлено · Редакція Prokso
- Прапорець --proxy-server не приймає логін і пароль: Chromium відкидає таку адресу
- У Puppeteer логін передає page.authenticate(), у Playwright — поля username і password в опції proxy
- SOCKS5 з логіном у Chromium не працює: беріть HTTP-порт 823 або доступ за IP
Що означає помилка
Прапорець --proxy-server приймає тільки схему, хост і порт. Вихідний код Chromium відкидає адресу проксі з логіном і паролем, тож рядок http://ЛОГІН:ПАРОЛЬ@gw.prokso.com:823 закінчується помилкою net::ERR_NO_SUPPORTED_PROXIES.
У Puppeteer облікові дані передає метод page.authenticate({username, password}). За документацією він надає дані для HTTP-автентифікації, а для цього за лаштунками вмикає перехоплення запитів, що може вплинути на швидкодію. Метод належить сторінці, тож викликайте його для кожної нової сторінки до page.goto().
У Playwright проксі задають опцією proxy: {server, username, password}. Документація каже, що підтримуються HTTP(S) і SOCKSv5, проксі можна задати для всього браузера або для окремого контексту, а логін і пароль описано лише для HTTP(S)-проксі. Короткий запис gw.prokso.com:823 вважається HTTP-проксі.
Причини
- Логін у --proxy-server. Chromium відкидає таку адресу, і браузер лишається без проксі: net::ERR_NO_SUPPORTED_PROXIES.
- Немає або неправильні облікові дані. Код -338 net::ERR_INVALID_AUTH_CREDENTIALS у Chromium означає, що облікові дані не вдалося встановити під час HTTP-автентифікації. Перевірте, чи викликано автентифікацію і чи правильні логін та пароль; про сам код — на сторінці 407.
- Браузер не дістався до проксі. Код -130 net::ERR_PROXY_CONNECTION_FAILED означає, що не вдалося створити з'єднання з проксі-сервером: помилка в імені хоста або в підключенні сокета. У Firefox під Playwright відповідник — NS_ERROR_PROXY_CONNECTION_REFUSED: спроба з'єднатися з проксі не вдалася.
- SOCKS5 з логіном у Chromium. Chromium не підтримує автентифікацію для SOCKSv5, тому page.authenticate() тут не допоможе: рукостискання завершиться SOCKS-помилкою.
- Тунель не відкрився. Якщо з'єднання з проксі є, але CONNECT до сайту не вдався, буде ERR_TUNNEL_CONNECTION_FAILED.
Як виправити
- Puppeteer: запускайте з
--proxy-server=http://gw.prokso.com:823, а потім викличтеawait page.authenticate({username: 'ЛОГІН', password: 'ПАРОЛЬ'})до переходу на сайт. Повний приклад — в інструкції Puppeteer. - Playwright: передайте
proxy: {server: 'http://gw.prokso.com:823', username: 'ЛОГІН', password: 'ПАРОЛЬ'}уlaunch(). Деталі — в інструкції Playwright. - Для SOCKS5 у Chromium увімкніть доступ за IP (до 5 адрес в особистому кабінеті) і пишіть
socks5://gw.prokso.com:824без логіна, або перейдіть на HTTP-порт 823 з логіном. - Потрібен один IP на весь сценарій — беріть порт із діапазону 10000–20000: він тримає фіксований IP протягом тривалості сесії (1–120 хв, за замовчуванням 30). Докладніше — sticky-сесія.
- Якщо бачите ERR_PROXY_CONNECTION_FAILED, перевірте хост gw.prokso.com, порт і мережу за сторінкою помилки підключення до проксі.
Як перевірити, що все запрацювало
Після запуску відкрийте https://prokso.com/ip у тій самій сторінці й прочитайте JSON: поля ip, country та org мають належати проксі, а не вашому підключенню. Те саме видно на сторінці перевірки IP.
Діагностика за 2 хвилини
Спершу вставте рядок у перевірку проксі. Якщо там проксі працює, причина в програмі чи її налаштуваннях. Якщо ні — перевірте рядок з терміналу:
curl -v -x "http://ЛОГІН:ПАРОЛЬ@gw.prokso.com:823" https://api.ipify.org
- Рядок
< HTTP/1.1 407одразу післяCONNECT— відповідає проксі. Назва після коду, наприкладNO_USER, підказує причину. - Проксі відповів на
CONNECTкодом 200, а далі прийшов інший код — проксі працює, цю відповідь дав сайт. - Жодної відповіді, лише тайм-аут — з'єднання не дійшло до проксі: перевірте хост, порт і мережу.
Інструкції, де трапляється ця помилка
Питання й відповіді
Чи можна задати різні проксі для різних вкладок?
Прапорець --proxy-server задає проксі для всього браузера. У Playwright документація дозволяє задати проксі й для окремого контексту, тож різні контексти можуть іти через різні порти.
Чому page.authenticate() не працює з SOCKS5?
Метод відповідає на запит HTTP-автентифікації. Chromium для SOCKSv5 автентифікацію не підтримує, тож запиту на вхід просто не буде. Беріть HTTP-порт або доступ за IP.
Де взяти логін і пароль?
Скопіюйте рядок проксі в особистому кабінеті на сторінці плану. Як влаштований логін і які параметри в нього додаються — на сторінці <a href="/help/gateway">шлюзу</a>.
Інші помилки проксі
Резидентські $1.59, мобільні $2.50, серверні $0.65 за 1 ГБ
Реєстрація за хвилину, доступи одразу після оплати.