Récupération et undicci intégrés#
Le nœud est global fetch est un indice. Donnez-lui un ProxyAgent par demande avec le dispatcher option, ou définissez-le globalement une fois avec 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 regroupe les connexions, de sorte que les requêtes consécutives peuvent réutiliser une connexion et donc une sortie. Pour une nouvelle sortie par demande créez l'agent avec pipelining: 0 et connections: 1, ou utilisez simplement un autre -sid- par session logique.
axios#
celui d'Axios proxy l'option ne tunnelise pas HTTPS de manière fiable ; l'approche standard est un agent de https-proxy-agent et 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);obtenu#
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);CHAUSSETTES5#
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());Variables d'environnement#
undici ne lit pas HTTPS_PROXY par défaut. Les versions récentes des undics sont livrées EnvHttpProxyAgent, ce qui fait ; définissez-le comme répartiteur global et l'ensemble du processus, y compris les bibliothèques tierces construites sur fetch, passe par le 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());Concurrence et rotation#
- Un
ProxyAgentpar session collante (différents-sid-), partagé par toutes les demandes de cette session. - Pour une rotation large, conservez un agent mais désactivez la réutilisation des connexions, ou exécutez N agents avec N identifiants de session et alternez-les.
- Regarder
UND_ERR_SOCKETetECONNRESET: une sortie résidentielle s'est éloignée ; réessayez une fois, la prochaine connexion en choisit une autre.
Les questions que les gens posent#
Pourquoi axios ignore-t-il mon proxy pour HTTPS ?
Sa prise en charge de proxy intégrée est limitée pour les tunnels CONNECT. Utilisez https-proxy-agent comme httpsAgent et définissez proxy: false pour qu'axios n'essaye pas de le gérer lui-même.
Puis-je proxy uniquement certaines requêtes ?
Oui. Transmettez au répartiteur ou à l'agent les demandes qui en ont besoin et laissez les autres intactes ; rien n'est global sauf si vous appelez setGlobalDispatcher.