Налаштування проксі в Node.js

Проксі в Node.js з axios і https-proxy-agent: HTTP(S) і SOCKS5, новий IP на кожен запит через порт 823, фіксований IP для сесії й кодування пароля.

Оновлено · Редакція Prokso

Дані для підключення
Хост
gw.prokso.com
Порт
823 HTTP · 824 SOCKS5 — новий IP на кожен запит · 10000–20000 фіксований IP (sticky-сесія), HTTP(S) і SOCKS5
Логін і пароль
у кабінеті, на сторінці плану

Готові рядки у потрібному форматі генерує кабінет: оберіть країну, тип IP і протокол.

Коротко
  • Хост — gw.prokso.com, порти 823 (HTTP), 824 (SOCKS5), 10000–20000 (фіксований IP, HTTP або SOCKS5)
  • Логін і пароль — у кабінеті на сторінці плану
  • Перевіряйте IP у відповіді самого запиту через проксі: сторінка «Мій IP» у браузері ваш скрипт не перевіряє
Проксі в Node.js: коротка відеоінструкція · 0:33

Покрокова інструкція, як підключити проксі Prokso в Node.js. Займе кілька хвилин.

Крок 1. Візьміть дані проксі в особистому кабінеті

Відкрийте план і скопіюйте хост gw.prokso.com, порт, логін і пароль. Порт 823 — HTTP, 824 — SOCKS5 (обидва дають новий IP на кожен запит); порти 10000–20000 — фіксований IP (sticky-сесія) до 120 хвилин, працюють і як HTTP, і як SOCKS5 (кожен порт — окрема адреса). Країну задають у логіні: логін__cr.ua.

Блок «Доступ» на сторінці плану: хост, порти, логін і пароль для рядка проксі
Блок «Доступ» на сторінці плану: хост, порти, логін і пароль для рядка проксі

Крок 2. Встановіть пакети

Для запитів через проксі знадобляться axios і https-proxy-agent: npm i axios https-proxy-agent.

Крок 3. Створіть агент проксі

Передайте адресу проксі в HttpsProxyAgent і підключіть його до запиту. Опцію proxy: false лишайте, щоб axios не накладав власні налаштування.

// npm i axios https-proxy-agent
import axios from "axios";
import { HttpsProxyAgent } from "https-proxy-agent";

const agent = new HttpsProxyAgent("http://ЛОГІН:ПАРОЛЬ@gw.prokso.com:823");
const { data } = await axios.get("https://api.ipify.org?format=json", { httpsAgent: agent, proxy: false });
console.log(data);

Збережіть код як check.mjs і запустіть node check.mjs.

Крок 4. Перемикайтеся між режимами

Порт 823 — новий IP на кожен запит, 10000–20000 — постійний IP для сесії. Для SOCKS5 використайте пакет socks-proxy-agent і порт 824 (ротація) або той самий фіксований порт 10000–20000.

Крок 5. Перевірте вивід скрипта

Запустіть приклад із кроку 3: axios іде на https://api.ipify.org через агент проксі й виводить у консоль { ip: '…' }. Це адреса, яку бачить сайт, — вона має відрізнятися від вашої. Якщо бачите помилку 407, перевірте логін і пароль. Сторінка «Мій IP» у браузері тут нічого не покаже: браузер іде напряму.

Приклад запуску: у виводі — IP проксі, а не ваш. На порту 823 кожен запуск дає нову адресу
Приклад запуску: у виводі — IP проксі, а не ваш. На порту 823 кожен запуск дає нову адресу

Один агент на весь застосунок

Створюйте агент проксі один раз і використовуйте його повторно в усіх запитах. Новий агент на кожен запит відкриває нове з'єднання з проксі, і скрипт працює повільніше. Найзручніше зібрати екземпляр axios із потрібними налаштуваннями:

import axios from "axios";
import { HttpsProxyAgent } from "https-proxy-agent";

const agent = new HttpsProxyAgent("http://USERNAME:PASSWORD@gw.prokso.com:823");
// one client for the whole app: proxy, timeout, no built-in axios proxy
const http = axios.create({ httpAgent: agent, httpsAgent: agent, proxy: false, timeout: 30000 });

const { data } = await http.get("https://prokso.com/ip");
console.log(data);

Тайм-аут задавайте явно: за замовчуванням axios чекає на відповідь нескінченно, і один запит, що завис, зупинить чергу.

Що означають помилки

  • Відповідь 407. Проксі не прийняв логін або пароль. Перевірте рядок і залишок трафіку на плані.
  • ECONNREFUSED. На вказаному хості й порту ніхто не відповідає: одруківка в адресі або порту.
  • ETIMEDOUT або ECONNRESET. З'єднання обірвалося або не встановилося. Повторіть запит: на порту 823 він піде з нового IP.
  • Запит пішов із вашого IP. Не вказано proxy: false, і axios застосував власні налаштування, або агент не передано для потрібного протоколу.

Коди 403 і 429 надходять від сайту, а не від проксі. Що з ними робити, описано на сторінці коди помилок проксі.

Паралельні запити

Promise.all запускає всі запити одразу. Для сотень адрес це перевантажує і сайт, і ваш скрипт. Обмежуйте кількість одночасних запитів чергою: десяти–двадцяти зазвичай достатньо, а в разі відповідей 429 зменшуйте.

Питання й відповіді

Чи читає Node.js змінні HTTP_PROXY?

Вбудовані модулі за замовчуванням їх не читають. Надійніше передавати проксі явно через агент, як у прикладі.

Як закодувати пароль зі спецсимволами?

Огорніть логін і пароль в <code>encodeURIComponent()</code> під час збирання адреси проксі.

Як тримати один IP для серії запитів?

Замініть порт 823 на фіксований порт із діапазону 10000–20000: усі запити через нього підуть з одного IP, доки триває сесія.