Beépített fetch és undici#
A csomópont globális fetch Add meg a választ! ProxyAgent Kérésre a következővel dispatcher A beállítást globálisan egyszer állíthatja be a setGlobalDispatcher.
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 A kérelemre vonatkozó friss kilépéshez hozza létre az ügynököt a következő paranccsal: configure_output() pipelining: 0 és connections: 1, vagy egyszerűen használjon egy másik -sid- logikai munkamenetenként.
axios#
Az axios sajátja proxy Az opció nem biztosít megbízható HTTPS tunnelt; a standard megoldás egy ügynök, https-proxy-agent és proxy: false.
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);- Megvan.#
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#
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());Környezeti változók#
A undici nem olvas HTTPS_PROXY A legutóbbi undici verziók alapértelmezés szerint EnvHttpProxyAgentÁllítsuk be globális diszpécserként, és az egész folyamat, beleértve a harmadik féltől származó, fetch-re épülő könyvtárakat is, átmegy a proxyon.
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());Egyidejűség és rotáció#
- Egy
ProxyAgentSticky munkamenetenként (különböző-sid-), amelyet az adott munkamenet összes kérelme megoszt. - Széles körű rotáció esetén tartsa meg az egyik ügynököt, de tiltsa le a kapcsolat újbóli használatát, vagy futtasson N ügynököket N munkamenet-azonosítóval és végezzen körbefutást közöttük.
- Figyelj!
UND_ERR_SOCKETésECONNRESET: egy lakóházi kijárat elment; próbálja újra egyszer, a következő csatlakozás vesz egy másikat.
Kérdések, amiket az emberek feltesznek#
Miért hagyja figyelmen kívül az axios a proxyom HTTPS esetén?
Használd a https-proxy-agent-et httpsAgentként és állítsd be a proxy: false értéket, hogy az axios ne próbálja meg kezelni magát, de ha nem tudod, akkor használd a proxy-t.
Csak bizonyos kérelmeket küldhetek proxy útján?
Adja át a diszpécsernek vagy ügynöknek azokat a kérelmeket, amelyekre szüksége van, és hagyja érintetlenül a többieket; semmi sem globális, hacsak nem hívja meg a setGlobalDispatcher parancsot.