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.
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.
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#
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());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.
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
ProxyAgentza 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_SOCKETaECONNRESET: 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.