- Host
- gw.prokso.com
- Port
- 823 HTTP · 824 SOCKS5 — nowy IP przy każdym żądaniu · 10000–20000 stały IP na całą sesję, HTTP(S) i SOCKS5
- Login i hasło
- w panelu klienta, na stronie planu
Gotowe wiersze w potrzebnym formacie wygenerujesz w panelu klienta: wybierz kraj, typ IP i protokół.
- Host gw.prokso.com, porty 823 (HTTP), 824 (SOCKS5), 10000–20000 (stały IP, HTTP lub SOCKS5)
- Login i hasło znajdziesz w panelu klienta na stronie planu
- Sprawdzaj IP w odpowiedzi na samo żądanie wysłane przez proxy: strona Mój IP w przeglądarce nie testuje Twojego skryptu
Instrukcja krok po kroku, jak podłączyć proxy Prokso w node-fetch. Zajmie to kilka minut.
Krok 1. Pobierz dane proxy z panelu klienta
Otwórz swój plan i skopiuj host gw.prokso.com, port, login i hasło. Port 823 to HTTP, a 824 to SOCKS5 (oba dają nowy IP przy każdym żądaniu); porty 10000–20000 utrzymują jeden IP przez całą sesję do 120 minut i działają zarówno jako HTTP, jak i SOCKS5 (każdy port to osobny adres). Kraj ustawiasz w loginie: username__cr.ua.

Krok 2. Zainstaluj pakiety
Potrzebujesz node-fetch i https-proxy-agent: npm i node-fetch https-proxy-agent.
Krok 3. Przekaż agenta proxy do żądania
Utwórz HttpsProxyAgent z URL proxy i przekaż go w opcji agent. Zapisz kod w pliku z rozszerzeniem .mjs i uruchom go poleceniem node.
import fetch from "node-fetch";
import { HttpsProxyAgent } from "https-proxy-agent";
const agent = new HttpsProxyAgent("http://USERNAME:PASSWORD@gw.prokso.com:823");
const res = await fetch("https://api.ipify.org?format=json", { agent });
console.log(await res.json());
Krok 4. Wbudowany fetch w Node.js 18 i nowszym
Wbudowany fetch ignoruje opcję agent. W jego przypadku zainstaluj undici (npm i undici) i przekaż ProxyAgent w opcji dispatcher.
import { ProxyAgent } from "undici";
const dispatcher = new ProxyAgent("http://USERNAME:PASSWORD@gw.prokso.com:823");
const res = await fetch("https://api.ipify.org?format=json", { dispatcher });
console.log(await res.json());Krok 5. Dobierz port do zadania
Port 823 daje nowy IP przy każdym żądaniu, a porty 10000–20000 utrzymują ten sam adres do 120 minut. Dla SOCKS5 użyj pakietu socks-proxy-agent z portem 824 albo portem ze stałym IP.
Krok 6. Sprawdź wynik
Uruchom przykład: skrypt wywołuje https://api.ipify.org i wypisuje IP, który widzi strona. Powinien to być adres proxy, a nie Twój. Błąd 407 oznacza nieprawidłowy login lub hasło. Strona Mój IP w przeglądarce nic tu nie pokaże, bo przeglądarka łączy się bezpośrednio.
Timeout i ponowienia
fetch domyślnie nie ma timeoutu: zawieszone żądanie będzie czekać w nieskończoność. Ustaw limit przez AbortSignal.timeout() i ponawiaj tylko chwilowe błędy:
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());Na porcie 823 każde ponowienie wychodzi z nowego IP. Kodów 403 i 429 nie warto ponawiać od razu: to odpowiedź strony, a nie błąd połączenia.
Jeden agent dla wszystkich żądań
Utwórz agenta raz i przekazuj go do wszystkich żądań. Agent utrzymuje otwarte połączenia z proxy, więc kolejne żądania idą szybciej. Nowy agent przy każdym żądaniu to nowe połączenie i dodatkowe opóźnienie.
Co oznaczają błędy
- Status 407. Proxy nie przyjęło loginu lub hasła albo w planie skończył się transfer.
- ECONNREFUSED. W hoście lub porcie proxy jest literówka.
- AbortError lub TimeoutError. Zadziałał Twój własny timeout: strona nie odpowiedziała na czas.
- Żądanie wyszło z Twojego własnego IP. Używasz wbudowanego
fetch, a on nie odczytuje opcjiagent: potrzebujeszdispatcherz undici.
Więcej o kodach odpowiedzi znajdziesz na stronie kody błędów proxy.
Jeśli proxy nie działa
Pytania i odpowiedzi (FAQ)
Dlaczego wbudowany fetch ignoruje proxy?
Wbudowany fetch w Node.js działa na bibliotece undici i nie odczytuje opcji agent. Proxy ustawia się w nim przez dispatcher, tak jak w przykładzie z ProxyAgent.
Czy mogę ustawić proxy dla wszystkich żądań naraz?
Tak: undici ma setGlobalDispatcher – przekaż mu ProxyAgent na początku programu, a wbudowany fetch będzie szedł przez proxy bez dodatkowych opcji.
Co wybrać: node-fetch czy wbudowany fetch?
W nowych projektach na Node.js 18 i nowszym wystarczy wbudowany fetch z undici. node-fetch ma sens, jeśli projekt już go używa.
Jak zakodować hasło ze znakami specjalnymi?
Owiń login i hasło w encodeURIComponent(), kiedy budujesz adres proxy.