Busca e undici integrados#
Global do nó fetch é indici. Dê um ProxyAgent por solicitação com o dispatcher opção ou defina-a globalmente uma vez com 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 agrupa conexões, portanto, solicitações consecutivas podem reutilizar uma conexão e, portanto, uma saída. Para uma nova saída por solicitação, crie o agente com pipelining: 0 e connections: 1, ou simplesmente use um diferente -sid- por sessão lógica.
eixos#
próprio do axios proxy a opção não encapsula HTTPS de forma confiável; a abordagem padrão é um agente de https-proxy-agent e 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);tenho#
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);MEIAS5#
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());Variáveis de ambiente#
undici não lê HTTPS_PROXY por padrão. Versões recentes do undici são enviadas EnvHttpProxyAgent, o que faz; defina-o como o despachante global e todo o processo, incluindo bibliotecas de terceiros construídas na busca, passa pelo 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());Simultaneidade e rotação#
- Um
ProxyAgentpor sessão fixa (diferente-sid-), compartilhado por todas as solicitações dessa sessão. - Para ampla rotação, mantenha um agente, mas desative a reutilização de conexão ou execute N agentes com N IDs de sessão e faça round-robin deles.
- Assistir
UND_ERR_SOCKETeECONNRESET: uma saída residencial desapareceu; tente novamente uma vez, a próxima conexão escolherá outra.
Perguntas que as pessoas fazem#
Por que o axios ignora meu proxy para HTTPS?
Seu suporte a proxy integrado é limitado para túneis CONNECT. Use https-proxy-agent como httpsAgent e defina proxy: false para que o axios não tente lidar com isso sozinho.
Posso fazer proxy apenas de algumas solicitações?
Sim. Repasse ao despachante ou agente as solicitações que necessitem e deixe as demais intocadas; nada é global, a menos que você chame setGlobalDispatcher.