Integrationer · Begynder

Hvordan man bruger proxies i Node.js med fetch, undici, axios og got

På understøttede Node.js-udgivelser aktiverer NODE_USE_ENV_PROXY=1 HTTP_PROXy, HTTPS_PROX og NO_PROX for indbygget hentning; --use-env-proxy er tilgængelig i Node.j 22.21 + og 24.5 + En eksplicit undici ProxyAgent eller EnvHttpProxyAgent er et alternativ. Biblioteker med deres egne transporter eller brugerdefinerede agenter har brug for separat konfiguration, så test hvert værktøj snarere end at antage, at hele processen er dækket.

2 min læsning 6 sektioner Gennemgået Redaktionsteamet Proxy Cyber

Indbygget hent og undici#

Node' s global fetch Giv det en chance. ProxyAgent pr. forespørgsel med dispatcher mulighed, eller indstille 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 frisk exit pr. anmodning skal du oprette agenten med den samme IP-adresse som den, der er angivet i kommandolinjen. pipelining: 0 og connections: 1, eller brug blot en anden -sid- pr. logisk session.

akser#

axios's egen proxy Denne mulighed tunnellerer ikke HTTPS pålideligt; standardtilgangen 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);

fik#

fik
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 læser ikke HTTPS_PROXY Seneste undici versioner af denne software er: EnvHttpProxyAgent, som gør; sæt den som global dispatcher og hele processen, herunder tredjepartsbiblioteker bygget på fetch, går gennem proxyen.

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

Samtidighed og rotation#

  • En ProxyAgent pr. klæbrig session (forskellige -sid-), der deles af alle anmodninger i den pågældende session.
  • Hvis du vil have en bred rotation, skal du beholde én agent, men deaktivere genbrug af forbindelser eller køre N agenter med N sessions-id'er og bruge round robin.
  • Watch UND_ERR_SOCKET og ECONNRESET: en boligafkørsel gik væk; prøv igen én gang, den næste forbindelse vælger en anden.

Spørgsmål folk stiller#

Hvorfor ignorerer axios min proxy for HTTPS?

Dens indbyggede proxy-understøttelse er begrænset til CONNECT tunneler.Brug https-proxy-agent som httpsAgent og sæt proxy: false så axios ikke forsøger at håndtere det selv.

Kan jeg kun proxy nogle anmodninger?

Du kan sende afsenderen eller agenten de anmodninger, der har brug for det, og lade de andre være uberørte; intet er globalt, medmindre du kalder setGlobalDispatcher.

Din konto er blevet oprettet

Administrer alle dine proxyer fra én konto

Sammenlign netværk, placer ordrer og følg din saldo og supportanmodninger fra ét dashboard Vores team gennemgår betalinger og giver forbindelsesoplysninger efter levering.

Opret konto