Use um IP de proxy com o Undici do Node
Associe um ProxyAgent do Undici a uma requisição fetch e mantenha seu pool separado de outros tráfegos do Node.
Undici roteia uma requisição por um dispatcher. Crie um ProxyAgent para o proxy HTTP escolhido e passe-o na chamada fetch, em vez de mudar o dispatcher global do processo inteiro.
npm install [email protected]
import { fetch, ProxyAgent } from 'undici';
const dispatcher = new ProxyAgent('http://203.0.113.10:8080');
try {
const response = await fetch('https://example.com/', {
dispatcher,
signal: AbortSignal.timeout(15000),
});
console.log(response.status);
console.log(await response.text());
} finally {
await dispatcher.close();
}
Salve o programa como arquivo .mjs ou use um projeto com módulos ES. Substitua o IP de documentação por um proxy HTTP da lista de proxies HTTP. A importação usa deliberadamente o fetch do Undici; portanto, a opção dispatcher pertence ao cliente mostrado.
Confira a compatibilidade do Node antes de culpar o IP
As versões do Node aceitas pelo Undici dependem da versão do pacote. Este exemplo usa Undici 8.12.3, que exige Node 22.19.0 ou mais recente. Um erro de carregamento de módulo ou versão do mecanismo ocorre antes de a requisição chegar ao proxy. Confira o requisito do pacote instalado, sem presumir que qualquer Node executa o Undici mais recente.
Um agente pode atender requisições repetidas
O programa curto fecha o dispatcher ao terminar. Se uma aplicação em execução envia várias requisições pelo mesmo endpoint, mantenha o agente para essa carga de trabalho e feche-o quando ela acabar. Criar e fechar um agente por URL impede o reaproveitamento útil de conexões.
Um dispatcher global só é apropriado quando você deseja a mudança mais ampla. Passá-lo explicitamente facilita testar um IP sem alterar as requisições de saída de outro componente.
Observe a resposta e a etapa da falha
Fetch não trata todo status HTTP de erro como promessa rejeitada. Um 403 ou 429 pode ser uma resposta real do site transportada pelo proxy. Um erro de conexão ou de túnel pode rejeitar a requisição antes de existir um objeto de resposta. Leia o status separadamente dos erros lançados pela chamada.
Se for necessária autenticação, ProxyAgent do Undici oferece opções no construtor. Não adicione um cabeçalho de autorização de proxy aos cabeçalhos da requisição ao site; o agente trata outro salto da conexão.