Integrace · Začátečník

Jak používat proxy v Node.js s fetch, undici, axios a got

Na podporovaných verzích Node.js, NODE_USE_ENV_PROXY=1 umožňuje HTTP_PROXy, HTTPS_PROX Y a NO_PROXYS pro vestavěné fetch; --use-env-proxy je k dispozici v Node.jsu 22.21+ a 24.5+. Explicitní undici ProxyAgent nebo EnvHttpProxyAgent je alternativou. knihovny s vlastními transporty nebo vlastní agenti potřebují samostatnou konfiguraci, takže otestujte každý nástroj spíše než předpokládat, že celý proces je pokryt.

2 min čtení 6 sekcí Recenzováno Redakční tým Proxy Cyber

Vestavěný fetch a undici#

Globální uzel fetch Dávejte si pozor na to, co píšete. ProxyAgent na vyžádání s dispatcher možnost, nebo ji nastavit globálně jednou s setGlobalDispatcher.

jedenáct
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 Pro čerstvý výstup na jeden požadavek vytvořte agenta s názvem.proxy a přidejte k němu příkaz: pipelining: 0 a connections: 1, nebo jednoduše použít jinou -sid- za logickou relaci.

Axios#

axios's own proxy Tato možnost neprovádí tunelování HTTPS spolehlivě; standardní přístup je agent z https-proxy-agent a 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);

Dostal jsem#

Dostal jsem
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-proxy-agent
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());

Proměnné prostředí#

undici nečte HTTPS_PROXY Nedávné verze undici ship EnvHttpProxyAgent, který to dělá; nastavte jej jako globální dispečer a celý proces, včetně knihoven třetích stran postavených na fetch, prochází 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());

Souběžnost a rotace#

  • Jeden ProxyAgent za sticky relaci (různé -sid-), sdílený všemi požadavky dané relace.
  • Pro širokou rotaci ponechte jednoho agenta, ale zakážete opětovné použití připojení nebo spusťte N agentů s N ID relací a provádějte mezi nimi cyklické přepínání.
  • Watch UND_ERR_SOCKET a ECONNRESET: rezidenční výjezd odešel; zkuste to ještě jednou, další spojení vybere jiný.

Otázky, které lidé kladou#

Proč axios ignoruje můj proxy server pro HTTPS?

Použijte https-proxy-agent jako httpsAgent a nastavte proxy: false, aby axios neměl problém s tímto serverem sám.Proxy agent je v axiosu zabudován do samotného axiosu.

Mohu proxy pouze některé požadavky?

Předejte dispečerovi nebo agentovi požadavky, které to potřebují a nechte ostatní nedotčené; nic není globální, pokud nezavoláte setGlobalDispatcher.

Váš účet |

Spravujte všechny své proxy v jednom účtu

Porovnejte sítě, zadejte objednávky a sledujte zůstatek a požadavky na podporu z jednoho panelu.Náš tým kontroluje platby a poskytuje podrobnosti o připojení po dodání.

Vytvořit účet