Jak skonfigurować proxy w Node.js

Proxy w Node.js z axios i https-proxy-agent: HTTP i SOCKS5, nowy IP przy każdym żądaniu na porcie 823, sesje sticky, kodowanie hasła.

Zaktualizowano · Redakcja Prokso

Dane do połączenia
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ół.

W skrócie
  • Host gw.prokso.com, porty 823 (HTTP), 824 (SOCKS5), 10000–20000 (sesje sticky, 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.js. 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 (sesja sticky) 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.

Blok „Dostęp” na stronie planu: host, porty, login i hasło do linii proxy
Blok „Dostęp” na stronie planu: host, porty, login i hasło do linii proxy

Krok 2. Zainstaluj pakiety

Potrzebujesz axios i https-proxy-agent: npm i axios https-proxy-agent.

Krok 3. Utwórz agenta proxy

Przekaż URL proxy do HttpsProxyAgent i dołącz go do żądania. Zostaw proxy: false, żeby axios nie stosował własnych ustawień.

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

const agent = new HttpsProxyAgent("http://USERNAME:PASSWORD@gw.prokso.com:823");
const { data } = await axios.get("https://api.ipify.org?format=json", { httpsAgent: agent, proxy: false });
console.log(data);

Zapisz to jako check.mjs i uruchom node check.mjs.

Krok 4. Przełączaj się między trybami

Port 823 daje nowy IP przy każdym żądaniu, a 10000–20000 – stały IP na czas sesji. Dla SOCKS5 użyj pakietu socks-proxy-agent i portu 824 (rotacja) albo tego samego portu sticky 10000–20000.

Krok 5. Sprawdź wynik skryptu

Uruchom przykład z kroku 3: axios wywołuje https://api.ipify.org przez agenta proxy i wypisuje { ip: '…' }. To adres, który widzi strona, i powinien różnić się od Twojego. 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.

Przykład uruchomienia: w wyniku widać IP proxy, a nie Twoje. Na porcie 823 każde uruchomienie daje nowy adres
Przykład uruchomienia: w wyniku widać IP proxy, a nie Twoje. Na porcie 823 każde uruchomienie daje nowy adres

Jeden agent dla całej aplikacji

Utwórz agenta proxy raz i używaj go we wszystkich żądaniach. Nowy agent przy każdym żądaniu otwiera nowe połączenie z proxy, a skrypt działa wolniej. Najwygodniej zbudować instancję axios z potrzebnymi ustawieniami:

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);

Ustaw timeout jawnie: domyślnie axios czeka na odpowiedź w nieskończoność, a jedno zawieszone żądanie zatrzyma całą kolejkę.

Co oznaczają błędy

  • Odpowiedź 407. Proxy nie przyjęło loginu lub hasła. Sprawdź linię i pozostały transfer w planie.
  • ECONNREFUSED. Na podanym hoście i porcie nic nie odpowiada: w adresie lub porcie jest literówka.
  • ETIMEDOUT lub ECONNRESET. Połączenie zostało zerwane albo w ogóle nie zostało nawiązane. Ponów żądanie: na porcie 823 wyjdzie ono z nowego IP.
  • Żądanie wyszło z Twojego własnego IP. Albo brakuje proxy: false i axios zastosował własne ustawienia, albo agent nie został przekazany dla właściwego protokołu.

Kody 403 i 429 pochodzą od strony, a nie od proxy. Co z nimi zrobić, opisujemy na stronie kody błędów proxy.

Żądania równoległe

Promise.all uruchamia wszystkie żądania naraz. Przy setkach adresów przeciąża to zarówno stronę, jak i Twój skrypt. Ogranicz liczbę jednoczesnych żądań kolejką: zwykle wystarczy od dziesięciu do dwudziestu, a jeśli dostajesz odpowiedzi 429 – zmniejsz tę liczbę.

Jeśli proxy nie działa

Pytania i odpowiedzi (FAQ)

Czy Node.js odczytuje zmienne HTTP_PROXY?

Wbudowane moduły domyślnie ich nie odczytują. Pewniej jest przekazać proxy jawnie przez agenta, tak jak w przykładzie.

Jak zakodować hasło ze znakami specjalnymi?

Owiń login i hasło w encodeURIComponent(), kiedy budujesz adres proxy.

Jak zachować jeden IP dla serii żądań?

Zamień port 823 na port sticky z zakresu 10000-20000: wszystkie żądania przez niego wyjdą z jednego IP, dopóki trwa sesja.