Como usar proxies no Node.js sem nenhuma biblioteca

Como usar proxies no Node.js sem nenhuma biblioteca

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


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.

Zivadin Petrovic

Zivadin Petrovic

Especialista em Integração de Proxy

Zivadin Petrovic, uma mente brilhante e inovadora no campo da privacidade digital e gerenciamento de dados, atua como Proxy Integration Specialist na ProxyRoller. Com apenas 22 anos, Zivadin já fez contribuições significativas para o desenvolvimento de sistemas simplificados para implantação eficiente de proxy. Sua função envolve a curadoria e o gerenciamento das listas abrangentes de proxy da ProxyRoller, garantindo que elas atendam às necessidades dinâmicas de usuários que buscam soluções aprimoradas de navegação, scraping e privacidade.

Comentários (0)

Ainda não há comentários aqui, você pode ser o primeiro!

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *