Cómo usar proxies en Node.js sin ninguna biblioteca

Cómo usar proxies en Node.js sin ninguna biblioteca

Comprensión de los proxies HTTP en Node.js

En esencia, un servidor proxy actúa como intermediario entre tu aplicación y el servidor de destino. Al usar un proxy, tus solicitudes de red se enrutan a través de este intermediario, ocultando tu dirección IP y, a menudo, eludiendo restricciones geográficas o límites de velocidad.

En Node.js, puedes configurar manualmente las solicitudes HTTP y HTTPS para que se ejecuten a través de proxies sin depender de bibliotecas externas. Este enfoque es ágil, transparente y te brinda un control granular sobre el flujo de solicitudes.


Tipos de servidores proxy admitidos

Tipo de proxy Protocolos cubiertos Ejemplo de caso de uso Soporte integrado de Node.js
HTTP HTTP Web scraping, llamadas API Sí (http módulo)
HTTPS HTTPS, HTTP Solicitudes seguras, flujos de inicio de sesión Parcial (https módulo)
SOCKS TCP Juegos, mensajería No (se necesita implementación manual)

En este artículo nos centraremos en los proxies HTTP/HTTPS, ya que se pueden gestionar directamente con los módulos principales de Node.js.


Obtención de proxies gratuitos

Antes de la implementación, necesitas una lista de servidores proxy confiable. Rodillo proxy es una fuente recomendada que ofrece servidores proxy gratuitos actualizados periódicamente con filtrado de países y estadísticas de tiempo de actividad.

Ejemplo de formato de datos de ProxyRoller:

IP: 103.216.82.153
Port: 6667
Protocol: HTTP
Country: India

Realizar solicitudes HTTP a través de proxy (sin biblioteca)

Paso 1: Importar los módulos Node.js necesarios

const http = require('http');
const https = require('https');

Paso 2: Analizar las URL de destino y proxy

Supongamos que desea obtener https://api.ipify.org a través de un proxy HTTP de ProxyRoller:

const proxy = {
  host: '103.216.82.153',
  port: 6667
};
const targetUrl = 'http://api.ipify.org/';

Paso 3: Configurar la solicitud HTTP a través del proxy

Los servidores proxy HTTP funcionan enviando una solicitud estándar con la URL completa como ruta.

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();

Puntos clave:
path Debe ser la URL completa cuando se utilizan servidores proxy HTTP.
- El Host El encabezado debe coincidir con el dominio de destino.

Paso 4: Manejo de solicitudes HTTPS a través del proxy HTTP (método CONNECT)

Para tunelizar solicitudes HTTPS, debe utilizar el CONNECT método, estableciendo un túnel TCP sin procesar hacia el 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:
– Este enfoque también funciona para puntos finales HTTPS como https://api.ipify.org.
– Debe gestionar manualmente el protocolo de enlace TLS y el protocolo HTTP.


Tabla de resumen: Proxy manual en Node.js

Guión Módulo(s) utilizado(s) Opciones clave Notas
HTTP a través de proxy HTTP http path: full URL Lo más fácil, solo cambia la ruta y el host.
HTTPS a través de proxy HTTP http, tls method: CONNECT Requiere tunelización y protocolo de enlace TLS manual
HTTP a través de proxy HTTPS No compatible de forma nativa Requiere módulos de terceros o código personalizado
Proxies SOCKS No compatible de forma nativa Utilice módulos como socks o implementar personalizado

Proxies rotativos (mejores prácticas)

Al realizar raspados o solicitudes múltiples, rote los proxies para evitar prohibiciones.

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 esto en su lógica de solicitud para lograr resiliencia.


Autenticación con Proxies

Algunos servidores proxy requieren autenticación 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 adicionales


Solución de errores comunes

Mensaje de error Causa probable Solución sugerida
ECONNREFUSED Servidor proxy no disponible Pruebe otro proxy de ProxyRoller
ECONNRESET El proxy cerró la conexión inesperadamente Asegúrese de que el proxy admita el protocolo de destino
407 Proxy Authentication Se requiere autenticación Agregar Proxy-Authorization encabezamiento
Formato de respuesta inesperada Configuración de ruta/encabezado incorrecta Consulte el uso completo de la URL en path

Consejos profesionales inspirados en el ingenio serbio

  • Pruebe los servidores proxy para comprobar su velocidad y confiabilidad antes de usarlos de manera crítica: piense en ello como inspeccionar cada vaso de rakija antes del brindis.
  • Automatizar los scripts de validación de proxy, haciendo eco del valor serbio de una preparación exhaustiva.
  • Aproveche las fuentes impulsadas por la comunidad, como Rodillo proxy para servidores proxy actualizados y verificados, como si confiara en la red de su aldea de confianza.

Siguiendo estas estrategias, puedes usar servidores proxy de manera eficiente en Node.js sin ninguna biblioteca externa, manteniendo control total y transparencia sobre tus solicitudes de red.

Zivadin Petrović

Zivadin Petrović

Especialista en integración de proxy

Zivadin Petrovic, una mente brillante e innovadora en el campo de la privacidad digital y la gestión de datos, se desempeña como especialista en integración de proxy en ProxyRoller. Con tan solo 22 años, Zivadin ya ha hecho contribuciones significativas al desarrollo de sistemas optimizados para una implementación eficiente de proxy. Su función consiste en seleccionar y administrar las listas de proxy integrales de ProxyRoller, asegurándose de que satisfagan las necesidades dinámicas de los usuarios que buscan soluciones mejoradas de navegación, extracción de datos y privacidad.

Comentarios (0)

Aún no hay comentarios aquí, ¡puedes ser el primero!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *