- Хост
- 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» у браузері ваш скрипт не перевіряє
Покрокова інструкція, як підключити проксі Prokso в node-fetch. Займе кілька хвилин.
Крок 1. Візьміть дані проксі в особистому кабінеті
Відкрийте план і скопіюйте хост gw.prokso.com, порт, логін і пароль. Порт 823 — HTTP, 824 — SOCKS5 (обидва дають новий IP на кожен запит); порти 10000–20000 — фіксований IP (sticky-сесія) до 120 хвилин, працюють і як HTTP, і як SOCKS5 (кожен порт — окрема адреса). Країну задають у логіні: логін__cr.ua.

Крок 2. Встановіть пакети
Потрібні node-fetch і https-proxy-agent: npm i node-fetch https-proxy-agent.
Крок 3. Передайте агент проксі в запит
Створіть HttpsProxyAgent з адресою проксі й передайте його в опції agent. Збережіть код у файл із розширенням .mjs і запустіть через node.
import fetch from "node-fetch";
import { HttpsProxyAgent } from "https-proxy-agent";
const agent = new HttpsProxyAgent("http://ЛОГІН:ПАРОЛЬ@gw.prokso.com:823");
const res = await fetch("https://api.ipify.org?format=json", { agent });
console.log(await res.json());
Крок 4. Вбудований fetch у Node.js 18 і новіших
Вбудований fetch опцію agent не приймає. Для нього встановіть undici (npm i undici) і передайте ProxyAgent в опції dispatcher.
import { ProxyAgent } from "undici";
const dispatcher = new ProxyAgent("http://ЛОГІН:ПАРОЛЬ@gw.prokso.com:823");
const res = await fetch("https://api.ipify.org?format=json", { dispatcher });
console.log(await res.json());Крок 5. Оберіть порт під завдання
Порт 823 — новий IP на кожен запит, порти 10000–20000 — та сама адреса до 120 хвилин. Для SOCKS5 візьміть пакет socks-proxy-agent і порт 824 або фіксований порт.
Крок 6. Перевірте вивід
Запустіть приклад: скрипт звертається до https://api.ipify.org і друкує IP, який бачить сайт. Це має бути адреса проксі, а не ваша. Помилка 407 означає неправильний логін або пароль. Сторінка «Мій IP» у браузері тут не допоможе: браузер іде напряму.
Тайм-аут і повтори
У fetch немає тайм-ауту за замовчуванням: запит, що завис, чекатиме нескінченно. Задавайте межу через AbortSignal.timeout() і повторюйте лише тимчасові збої:
import fetch from "node-fetch";
import { HttpsProxyAgent } from "https-proxy-agent";
const agent = new HttpsProxyAgent("http://USERNAME:PASSWORD@gw.prokso.com:823");
async function get(url, tries = 3) {
for (let i = 1; i <= tries; i++) {
try {
const res = await fetch(url, { agent, signal: AbortSignal.timeout(30000) });
if (![502, 503, 504].includes(res.status)) return res; // retry only temporary failures
} catch (e) {
if (i === tries) throw e;
}
await new Promise((r) => setTimeout(r, 1000 * i)); // growing pause
}
throw new Error("no response after retries");
}
console.log(await (await get("https://prokso.com/ip")).text());На порту 823 кожен повтор іде з нового IP. Коди 403 і 429 повторювати одразу не варто: це відповідь сайту, а не збій з'єднання.
Один агент на всі запити
Створюйте агент один раз і передавайте його в усі запити. Агент зберігає відкриті з'єднання з проксі, і повторні запити йдуть швидше. Новий агент на кожен запит — це нове з'єднання й зайва затримка.
Що означають помилки
- Статус 407. Проксі не прийняв логін або пароль чи на плані закінчився трафік.
- ECONNREFUSED. Одруківка в хості або порту проксі.
- AbortError або TimeoutError. Спрацював ваш тайм-аут: сайт не відповів вчасно.
- Запит пішов із вашого IP. Ви використовуєте вбудований
fetch, а він опціюagentне читає — потрібенdispatcherз undici.
Докладніше про коди відповіді — на сторінці коди помилок проксі.
Питання й відповіді
Чому вбудований fetch ігнорує проксі?
Вбудований fetch у Node.js працює на бібліотеці undici й не читає опцію agent. Проксі для нього задається через dispatcher, як у прикладі з ProxyAgent.
Чи можна задати проксі для всіх запитів одразу?
Так: в undici є функція setGlobalDispatcher — передайте їй ProxyAgent на початку програми, і вбудований fetch піде через проксі без додаткових опцій.
Що вибрати: node-fetch чи вбудований fetch?
У нових проєктах на Node.js 18 і новіших достатньо вбудованого fetch з undici. node-fetch має сенс, якщо він уже використовується в проєкті.
Як закодувати пароль зі спецсимволами?
Огорніть логін і пароль в <code>encodeURIComponent()</code> під час збирання адреси проксі.