Проксі з логіном у 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.

Як виправити

  1. Puppeteer: запускайте з --proxy-server=http://gw.prokso.com:823, а потім викличте await page.authenticate({username: 'ЛОГІН', password: 'ПАРОЛЬ'}) до переходу на сайт. Повний приклад — в інструкції Puppeteer.
  2. Playwright: передайте proxy: {server: 'http://gw.prokso.com:823', username: 'ЛОГІН', password: 'ПАРОЛЬ'} у launch(). Деталі — в інструкції Playwright.
  3. Для SOCKS5 у Chromium увімкніть доступ за IP (до 5 адрес в особистому кабінеті) і пишіть socks5://gw.prokso.com:824 без логіна, або перейдіть на HTTP-порт 823 з логіном.
  4. Потрібен один IP на весь сценарій — беріть порт із діапазону 10000–20000: він тримає фіксований IP протягом тривалості сесії (1–120 хв, за замовчуванням 30). Докладніше — sticky-сесія.
  5. Якщо бачите 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 ГБ

Реєстрація за хвилину, доступи одразу після оплати.

Створити акаунт