Integracje · Początkujący

Jak używać serwerów proxy w Node.js z funkcjami fetch, undici, axios i got

W obsługiwanych wersjach Node.js NODE_USE_ENV_PROXY=1 włącza HTTP_PROXY, HTTPS_PROXY i NO_PROXY dla wbudowanego pobierania; Opcja --use-env-proxy jest dostępna w Node.js 22.21+ i 24.5+. Alternatywą jest jawny undici ProxyAgent lub EnvHttpProxyAgent. Biblioteki z własnymi transportami lub niestandardowymi agentami wymagają osobnej konfiguracji, dlatego należy testować każde narzędzie, zamiast zakładać, że uwzględniono cały proces.

2 min odczytu 6 sekcji Sprawdzono Zespół redakcyjny Proxy Cyber

Built- in fetch and undici#

Węzeł globalny fetch - To jest nieistotne. ProxyAgent na wniosek dispatcher opcja, lub ustawić go globalnie raz z setGlobalDispatcher.

undici
import { fetch, ProxyAgent, setGlobalDispatcher } from "undici";

const proxy = new ProxyAgent("http://USER-cc-us:PASS@res.proxy-cyber.com:9000");

// Per request
const res = await fetch("https://api.ipify.org", { dispatcher: proxy });
console.log(await res.text());

// Or globally, for every fetch in the process
setGlobalDispatcher(proxy);

A ProxyAgent łączy połączenia, więc kolejne żądania mogą ponownie wykorzystać jedno połączenie, a tym samym jedno wyjście. Aby uzyskać nowe wyjście na żądanie, utwórz agenta za pomocą pipelining: 0 oraz connections: 1lub po prostu użyć innego -sid- na sesji logicznej.

axios#

Axios proxy opcja nie tuneluje niezawodnie protokołu HTTPS; standardowe podejście to agent z https-proxy-agent oraz proxy: false.

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

const agent = new HttpsProxyAgent("http://USER-cc-de-city-berlin-sid-cart42-ttl-15m:PASS@res.proxy-cyber.com:9000");
const client = axios.create({ httpsAgent: agent, httpAgent: agent, proxy: false, timeout: 30000 });

const { data } = await client.get("https://api.ipify.org");
console.log(data);

Mam#

Mam
import got from "got";
import { HttpsProxyAgent } from "https-proxy-agent";

const agent = new HttpsProxyAgent("http://USER-cc-us:PASS@res.proxy-cyber.com:9000");
const body = await got("https://api.ipify.org", { agent: { https: agent, http: agent }, timeout: { request: 30000 } }).text();
console.log(body);

SOCKS5#

socks- proksy- czynnik
import fetch from "node-fetch";
import { SocksProxyAgent } from "socks-proxy-agent";

const agent = new SocksProxyAgent(process.env.PROXY_URL);
const response = await fetch("https://api.ipify.org", { agent });
console.log(await response.text());

Zmienne środowiskowe#

undici nie czyta HTTPS_PROXY domyślnie. Ostatni statek w wersji undici EnvHttpProxyAgent, co ma; ustaw go jako globalnego dyspozytora, a cały proces, łącznie z bibliotekami innych firm zbudowanymi na pobieraniu, przechodzi przez serwer proxy.

EnvHttpProxyAgent
import { EnvHttpProxyAgent, setGlobalDispatcher } from "undici";
// HTTPS_PROXY=http://USER-cc-us:PASS@res.proxy-cyber.com:9000 NO_PROXY=localhost node app.js
setGlobalDispatcher(new EnvHttpProxyAgent());

Konkursowe i rotacyjne#

  • Jeden ProxyAgent na sesji lepkiej (różne -sid-), podzielona przez wszystkie wnioski z tej sesji.
  • Aby zapewnić szeroką rotację, zachowaj jednego agenta, ale wyłącz ponowne użycie połączenia, lub uruchom N agentów z N identyfikatorami sesji i działaj okrężnie.
  • Patrz UND_ERR_SOCKET oraz ECONNRESET: zniknęło wyjście mieszkalne; spróbuj raz, następne połączenie wybierze inne.

Pytania, które ludzie zadają#

Dlaczego Axios ignoruje mój proxy dla HTTPS?

Wbudowana obsługa proxy jest ograniczona dla tuneli CONNECT. Użyj https-proxy-agent jako httpsAgent i ustaw proxy: false, aby axios nie próbował sam sobie z tym poradzić.

Mogę tylko poświadczyć kilka żądań?

Tak. Przekaż dyspozytorowi lub agentowi żądania, które tego potrzebują, a pozostałych pozostaw nietkniętymi; nic nie jest globalne, chyba że wywołasz setGlobalDispatcher.

Twoje konto

Zarządzaj swoimi proxy na jednym koncie

Porównuj sieci, składaj zamówienia i śledź saldo oraz prośby o wsparcie z jednego pulpitu nawigacyjnego. Nasz zespół sprawdza płatności i podaje szczegóły połączenia po dostawie.

Utwórz konto