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
- Documentación del módulo HTTP de Node.js
- Documentación del módulo HTTPS de Node.js
- Lista de servidores proxy gratuitos de ProxyRoller
- ¿Qué es el método CONNECT? (MDN)
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.
Comentarios (0)
Aún no hay comentarios aquí, ¡puedes ser el primero!