Помилки https-proxy-agent і socks-proxy-agent
Обидва агенти беруть проксі одним рядком-адресою. Більшість помилок виникає саме тут: рядок не розбирається, пароль ламає адресу або схема не та.
Оновлено · Редакція Prokso
- Обидва агенти розбирають рядок проксі як URL, тому потрібна повна адреса зі схемою
- Спецсимволи в логіні й паролі кодуйте через encodeURIComponent, інакше адреса ламається або змінюється хост
- Для SOCKS5 пишіть socks5h://, щоб назву сайту перетворював на IP проксі
Що означає помилка
Пакети https-proxy-agent і socks-proxy-agent розбирають рядок проксі стандартним класом URL. Якщо рядок не є коректною адресою, Node.js кидає TypeError: Invalid URL з кодом ERR_INVALID_URL. Так буває, наприклад, коли в паролі є символ / або порт більший за 65535.
Небезпечніше, коли помилки немає. Символи @ і # у паролі не ламають розбір, але змінюють адресу: у нашій перевірці рядок із паролем p@ss#1 перетворився на хост ss. Програма йде на неіснуючий хост і падає вже з ENOTFOUND.
Обидва агенти декодують логін і пароль функцією decodeURIComponent. Тому спецсимволи треба закодувати перед вставкою в рядок, і агент сам поверне їх у початковий вигляд. У socks-proxy-agent схема ще й визначає, хто перетворює назву сайту на IP: при socks5 це робить ваш комп'ютер, при socks5h — проксі.
Причини
- Рядок без схеми. Формат хост:порт:логін:пароль не є URL. socks-proxy-agent тоді відповідає TypeError «A "socks" protocol must be specified!».
- Спецсимволи в паролі без кодування. Символи / ? # @ : % і пробіл ламають адресу або тихо змінюють хост.
- Неправильний логін чи пароль. HTTP-шлюз відповідає «HTTP/1.1 407 NO_USER», а бібліотека socks на порту 824 — «Socks5 Authentication failed».
- Схема не відповідає порту. http:// потрібен для порту 823, socks5h:// — для порту 824; порти 10000–20000 приймають обидва протоколи.
- socks5 замість socks5h. Адресу сайту визначає ваш DNS, а не проксі, тому сайт може відкритися з IP, підібраним під вашу мережу, а не під країну проксі.
Як виправити
- Пишіть рядок повністю зі схемою:
http://ЛОГІН:ПАРОЛЬ@gw.prokso.com:823для https-proxy-agent іsocks5h://ЛОГІН:ПАРОЛЬ@gw.prokso.com:824для socks-proxy-agent. - Збирайте рядок з кодуванням:
`http://${encodeURIComponent(login)}:${encodeURIComponent(password)}@gw.prokso.com:823`. Тоді жоден символ пароля не зламає адресу. - При 407 скопіюйте логін і пароль з особистого кабінету заново, без пробілів. Параметри в логіні (країна, місто, сесія) перевірте за сторінкою логін, порти й параметри. Докладніше про код — на сторінці помилки 407.
- Якщо пароль не хочеться вставляти в рядок, увімкніть доступ за IP у кабінеті (до 5 адрес на план) і підключайтеся без логіна.
- Для SOCKS5 завжди беріть
socks5h://. Що робити, коли SOCKS-сервер відповідає загальною помилкою, — на сторінці SOCKS5 general failure.
Як перевірити, що все запрацювало
Перед запуском виведіть new URL(рядок).hostname: там має бути gw.prokso.com. Потім перевірте рядок у перевірці проксі й зробіть запит через агент на https://prokso.com/ip.
Діагностика за 2 хвилини
Спершу вставте рядок у перевірку проксі. Якщо там проксі працює, причина в програмі чи її налаштуваннях. Якщо ні — перевірте рядок з терміналу:
curl -v -x "http://ЛОГІН:ПАРОЛЬ@gw.prokso.com:823" https://api.ipify.org
- Рядок
< HTTP/1.1 407одразу післяCONNECT— відповідає проксі. Назва після коду, наприкладNO_USER, підказує причину. - Проксі відповів на
CONNECTкодом 200, а далі прийшов інший код — проксі працює, цю відповідь дав сайт. - Жодної відповіді, лише тайм-аут — з'єднання не дійшло до проксі: перевірте хост, порт і мережу.
Інструкції, де трапляється ця помилка
Питання й відповіді
Чим socks5 відрізняється від socks5h у socks-proxy-agent?
У вихідному коді пакета для socks5 назву сайту перетворює на IP ваш комп'ютер, для socks5h і просто socks — проксі. Про сам протокол — у глосарії: <a href="/glossary/socks5">SOCKS5</a>.
Чи треба кодувати логін, а не лише пароль?
Так, якщо в логіні є спецсимволи. Агенти декодують обидві частини, тож encodeURIComponent для логіна нічого не зіпсує.
Як підключити агент у своєму коді?
Передайте агент в опцію agent модулів http і https або в httpsAgent для axios. Приклади — в інструкції <a href="/guide/nodejs">Node.js</a>.
Інші помилки проксі
Резидентські $1.59, мобільні $2.50, серверні $0.65 за 1 ГБ
Реєстрація за хвилину, доступи одразу після оплати.