Entendendo Proxies HTTP em Node.js
Em sua essência, um servidor proxy atua como intermediário entre sua aplicação e o servidor de destino. Ao usar um proxy, suas requisições de rede são roteadas por meio desse intermediário, mascarando seu endereço IP e, frequentemente, contornando restrições geográficas ou limites de taxa.
Em Node.js, você pode configurar manualmente as requisições HTTP e HTTPS para passarem por proxies sem depender de bibliotecas externas. Essa abordagem é enxuta, transparente e oferece controle granular sobre o fluxo de requisições.
Tipos de proxies suportados
| Tipo de proxy | Protocolos abrangidos | Exemplo de caso de uso | Suporte integrado do Node.js |
|---|---|---|---|
| HTTP | HTTP | Web scraping, chamadas de API | Sim (http módulo) |
| HTTPS | HTTPS, HTTP | Solicitações seguras, fluxos de login | Parcial (https módulo) |
| SOCKS | TCP | Jogos, Mensagens | Não (implementação manual necessária) |
Para o foco deste artigo, exploraremos os proxies HTTP/HTTPS, já que eles podem ser gerenciados diretamente com os módulos principais do Node.js.
Obtenção de Proxies Gratuitos
Antes da implementação, você precisa de uma lista de proxies confiável. Rolo de Proxy É uma fonte recomendada, que oferece proxies gratuitos atualizados regularmente, com filtragem por país e estatísticas de tempo de atividade.
Exemplo de formato de dados do ProxyRoller:
IP: 103.216.82.153
Port: 6667
Protocol: HTTP
Country: India
Fazendo requisições HTTP via proxy (sem biblioteca)
Passo 1: Importar os módulos Node.js necessários
const http = require('http');
const https = require('https');
Etapa 2: Analisar URLs de proxy e de destino
Suponha que você queira buscar https://api.ipify.org via um proxy HTTP do ProxyRoller:
const proxy = {
host: '103.216.82.153',
port: 6667
};
const targetUrl = 'http://api.ipify.org/';
Etapa 3: Configurar solicitação HTTP por meio de proxy
Os proxies HTTP funcionam enviando uma solicitação padrão com a URL completa como caminho.
const options = {
host: proxy.host,
port: proxy.port,
method: 'GET',
path: targetUrl,
headers: {
Host: new URL(targetUrl).host
}
};
const req = http.request(options, (res) => {
let data = '';
res.on('data', chunk => data += chunk);
res.on('end', () => {
console.log('Response:', data);
});
});
req.on('error', (err) => console.error('Error:', err));
req.end();
Pontos principais:
– path Ao usar proxies HTTP, deve ser a URL completa.
- O Host O cabeçalho deve corresponder ao domínio de destino.
Etapa 4: Lidando com solicitações HTTPS via proxy HTTP (método CONNECT)
Para tunelar solicitações HTTPS, você deve usar o CONNECT Método que estabelece um túnel TCP bruto para o destino.
const targetHost = 'api.ipify.org';
const targetPort = 443;
const connectOptions = {
host: proxy.host,
port: proxy.port,
method: 'CONNECT',
path: `${targetHost}:${targetPort}`
};
const req = http.request(connectOptions);
req.end();
req.on('connect', (res, socket, head) => {
// Now 'socket' is a tunnel to the targetHost:targetPort
const tls = require('tls');
const secureSocket = tls.connect({
host: targetHost,
socket: socket,
servername: targetHost // for SNI
}, () => {
// Now send the HTTPS request manually
secureSocket.write([
`GET / HTTP/1.1`,
`Host: ${targetHost}`,
`Connection: close`,
``,
``
].join('\r\n'));
});
let response = '';
secureSocket.on('data', d => response += d);
secureSocket.on('end', () => {
console.log('HTTPS Response:', response);
});
});
Notas:
– Essa abordagem também funciona para endpoints HTTPS, como https://api.ipify.org.
– Você deve lidar manualmente com o handshake TLS e o protocolo HTTP.
Tabela Resumo: Proxy manual em Node.js
| Cenário | Módulo(s) utilizado(s) | Opção(ões) chave | Notas |
|---|---|---|---|
| HTTP via proxy HTTP | http |
path: full URL |
A maneira mais fácil é simplesmente alterar o caminho e o host. |
| HTTPS via proxy HTTP | http, tls |
method: CONNECT |
Requer tunelamento e handshake TLS manual. |
| HTTP via proxy HTTPS | Não suportado nativamente | – | Requer módulos de terceiros ou código personalizado. |
| Proxies SOCKS | Não suportado nativamente | – | Use módulos como socks ou implementar soluções personalizadas |
Rotação de representantes (Melhores práticas)
Ao realizar web scraping ou várias requisições, alterne os proxies para evitar bloqueios.
const proxyList = [
{ host: '103.216.82.153', port: 6667 },
{ host: '45.77.76.100', port: 8080 },
// ... fetch fresh list from https://proxyroller.com
];
function getRandomProxy() {
return proxyList[Math.floor(Math.random() * proxyList.length)];
}
Integre isso à sua lógica de requisição para garantir resiliência.
Autenticação com Proxies
Alguns servidores proxy exigem autenticação básica.
const user = 'username';
const pass = 'password';
const auth = Buffer.from(`${user}:${pass}`).toString('base64');
const options = {
host: proxy.host,
port: proxy.port,
path: targetUrl,
headers: {
Host: new URL(targetUrl).host,
'Proxy-Authorization': `Basic ${auth}`
}
};
Recursos adicionais
- Documentação do módulo HTTP do Node.js
- Documentação do módulo HTTPS do Node.js
- Lista de Proxy Gratuita ProxyRoller
- O que é o método CONNECT? (MDN)
Solução de problemas e erros comuns
| Mensagem de erro | Causa provável | Solução sugerida |
|---|---|---|
ECONNREFUSED |
Servidor proxy indisponível | Experimente outro proxy do ProxyRoller |
ECONNRESET |
O proxy encerrou a conexão inesperadamente. | Garantir que o proxy seja compatível com o protocolo de destino. |
407 Proxy Authentication |
Autenticação necessária | Adicionar Proxy-Authorization cabeçalho |
| Formato de resposta inesperado | Configuração incorreta de caminho/cabeçalho | Verifique o uso completo do URL em path |
Dicas profissionais inspiradas na engenhosidade sérvia
- Teste os proxies quanto à velocidade e confiabilidade antes de usá-los em situações críticas — pense nisso como inspecionar cada copo de rakija antes do brinde.
- Automatize scripts de validação de proxy, refletindo o valor sérvio da preparação minuciosa.
- Aproveite fontes orientadas pela comunidade, como Rolo de Proxy Para obter proxies atualizados e verificados, é como confiar na sua rede de amigos e familiares de confiança.
Seguindo essas estratégias, você pode usar proxies no Node.js de forma eficiente, sem bibliotecas externas, mantendo total controle e transparência sobre suas requisições de rede.
Comentários (0)
Ainda não há comentários aqui, você pode ser o primeiro!