Integrasjoner · Nybegynner

Hvordan bruke proxyer i Node.js med fetch, undici, axios og fikk

På støttede Node.js-utgivelser, NODE_USE_ENV_PROXY = 1 aktiverer HTTP_PROX Y, HTTPS_PROX y og NO_PROX for innebygd hentning; --use-env-proxy er tilgjengelig i Node.JS 22.21 + og 24.5 + En eksplisitt undici ProxyAgent eller EnvHttpProxyAgent er et alternativ. Biblioteker med egne transporter eller tilpassede agenter trenger separat konfigurasjon, så test hvert verktøy heller enn å anta at hele prosessen er dekket.

2 min lesetid 6 seksjoner Gjennomgått Redaksjonsteamet Proxy Cyber

Innebygd hent og undici#

Node er global fetch Gi det en sjanse. ProxyAgent per forespørsel med dispatcher alternativet, eller angi det globalt én gang med setGlobalDispatcher.

elleve
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 For en ny utgang per forespørsel, opprett agenten med følgende navn: "agent_name" og velg "reset". pipelining: 0 og connections: 1, eller bare bruke en annen -sid- per logisk økt.

akser#

axios' s own proxy alternativet tunnelerer ikke HTTPS pålitelig; standardtilnærmingen er en agent fra https-proxy-agent og proxy: false.

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

fikk#

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

Miljøvariabler#

undici leser ikke HTTPS_PROXY Nylige undici versjoner av dette programmet er: EnvHttpProxyAgent, som gjør; sett den som global dispatcher og hele prosessen, inkludert tredjeparts biblioteker bygget på fetch, går gjennom 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());

Samtidighet og rotasjon#

  • En ProxyAgent per klebrig økt (forskjellig -sid-), som deles av alle forespørsler i økten.
  • For bred rotasjon kan du beholde én agent, men deaktivere gjenbruk av tilkobling, eller kjøre N agenter med N økt-ID-er og runde dem.
  • Se UND_ERR_SOCKET og ECONNRESET: en boligavkjørsel gikk bort; prøv igjen én gang, neste tilkobling velger en annen.

Spørsmål folk stiller#

Hvorfor ignorerer axios proxyen min for HTTPS?

Den innebygde mellomtjenerstøtten er begrenset for CONNECT-tunneler. Bruk https-proxy-agent som httpsAgent og sett proxy: false slik at axios ikke prøver å håndtere det selv.

Kan jeg proxy bare noen forespørsler?

Passer avsender eller agent på forespørsler som trenger det og la de andre uberørt; ingenting er global med mindre du kaller setGlobalDispatcher.

Din konto og passord

Administrer alle proxyene dine fra én konto

Sammenlign nettverk, legg inn bestillinger og følg saldoen din og forespørsler om støtte fra ett dashbord.Vårt team gjennomgår betalinger og gir tilkoblingsdetaljer etter levering.

Opprett konto