Inbyggd hämtning och undici#
Node's global fetch Ge det en chans. ProxyAgent per förfrågan med dispatcher alternativ, eller ställa in den globalt en gång med 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 För en ny utgång per begäran skapar du agenten med hjälp av den här funktionen och sedan använder du pipelining: 0 och connections: 1, eller helt enkelt använda en annan -sid- per logisk session.
axlar#
axios egna proxy alternativet tunnel HTTPS inte tillförlitligt; standardmetoden är en agent från https-proxy-agent och 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);fick#
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());Miljövariabler#
undici läser inte HTTPS_PROXY Senaste undici versionerna skickas med EnvHttpProxyAgent, som gör det; sätta den som global avsändare och hela processen, inklusive tredjepartsbibliotek byggda på fetch, går genom proxy.
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());Konkurrens och rotation#
- En
ProxyAgentper sticky session (olika-sid-), som delas av alla begäranden i sessionen. - För bred rotation kan du behålla en agent men inaktivera återanvändning av anslutningar eller köra N agenter med N sessions-ID:n och använda round robin.
- Titta.
UND_ERR_SOCKETochECONNRESET: en bostadsavfart gick bort; försök igen, nästa anslutning väljer en annan.
Frågor som folk ställer#
Varför ignorerar axios min proxy för HTTPS?
Dess inbyggda proxy-stöd är begränsat för CONNECT tunnlar.Använd https-proxy-agent som httpsAgent och ställ proxy: false så axios inte försöker hantera det själv.
Kan jag proxy bara vissa förfrågningar?
Passera avsändaren eller agenten på de förfrågningar som behöver det och lämna andra orörda; ingenting är globalt om du inte anropar setGlobalDispatcher.