Un proxy HTTP es un servidor intermediario que se sitúa entre su aplicación Node.js y el servidor de destino, reenviando solicitudes y respuestas. El uso de proxies en Node.js con librerías como axios, Puppeteer y Playwright le permite enmascarar su dirección IP, eludir restricciones geográficas, equilibrar la carga de solicitudes y extraer datos de sitios web de forma más eficaz. Este artículo proporciona ejemplos prácticos de cómo configurar estas librerías para usar proxies.
Configuración de Proxies con Axios
Axios es un popular cliente HTTP basado en promesas para Node.js. Configurar un proxy con Axios es sencillo utilizando la opción de configuración proxy.
Configuración Básica de Proxy
La opción proxy acepta un objeto con propiedades como host, port, username y password.
const axios = require('axios');
async function fetchData() {
try {
const response = await axios.get('https://api.example.com/data', {
proxy: {
host: 'your_proxy_host',
port: 8080,
username: 'your_username', // Optional
password: 'your_password' // Optional
}
});
console.log(response.data);
} catch (error) {
console.error('Error fetching data:', error);
}
}
fetchData();
Reemplace your_proxy_host y 8080 con su host y puerto de proxy reales. Si su proxy requiere autenticación, proporcione el username y password.
Uso de Variables de Entorno
Para mayor seguridad y mantenibilidad, es mejor almacenar las credenciales del proxy en variables de entorno.
const axios = require('axios');
async function fetchData() {
try {
const proxyHost = process.env.PROXY_HOST;
const proxyPort = process.env.PROXY_PORT;
const proxyUsername = process.env.PROXY_USERNAME;
const proxyPassword = process.env.PROXY_PASSWORD;
const response = await axios.get('https://api.example.com/data', {
proxy: {
host: proxyHost,
port: parseInt(proxyPort), // Ensure port is an integer
username: proxyUsername,
password: proxyPassword
}
});
console.log(response.data);
} catch (error) {
console.error('Error fetching data:', error);
}
}
fetchData();
Asegúrese de establecer las variables de entorno antes de ejecutar el script. Por ejemplo, en su terminal:
export PROXY_HOST=your_proxy_host
export PROXY_PORT=8080
export PROXY_USERNAME=your_username
export PROXY_PASSWORD=your_password
node your_script.js
Manejo de Proxies HTTPS
Para proxies HTTPS, asegúrese de que su proxy admita el método CONNECT. Axios maneja los proxies HTTPS sin problemas con la misma configuración.
Configuración de Proxies con Puppeteer
Puppeteer es una librería de Node.js que proporciona una API de alto nivel para controlar Chrome o Chromium sin interfaz gráfica. El uso de proxies con Puppeteer es crucial para tareas de web scraping y automatización donde necesita evitar bloqueos de IP o acceder a contenido restringido geográficamente.
Lanzamiento de Puppeteer con un Proxy
Puede configurar un proxy al iniciar Puppeteer utilizando el argumento de lanzamiento --proxy-server.
const puppeteer = require('puppeteer');
async function scrapeWebsite() {
const browser = await puppeteer.launch({
args: [
`--proxy-server=http://${process.env.PROXY_HOST}:${process.env.PROXY_PORT}`
]
});
const page = await browser.newPage();
await page.goto('https://www.example.com');
console.log(await page.title());
await browser.close();
}
scrapeWebsite();
Reemplace process.env.PROXY_HOST y process.env.PROXY_PORT con su host y puerto de proxy. Tenga en cuenta que este ejemplo asume un proxy HTTP; para proxies HTTPS, use https:// en el argumento --proxy-server.
Proxies Autenticados con Puppeteer
Puppeteer no admite directamente la autenticación de nombre de usuario y contraseña a través de argumentos de lanzamiento. Debe manejar la autenticación dentro del contexto de la página.
const puppeteer = require('puppeteer');
async function scrapeWebsite() {
const browser = await puppeteer.launch({
args: [
`--proxy-server=http://${process.env.PROXY_HOST}:${process.env.PROXY_PORT}`
]
});
const page = await browser.newPage();
// Authenticate with the proxy using page.authenticate
await page.authenticate({
username: process.env.PROXY_USERNAME,
password: process.env.PROXY_PASSWORD,
});
await page.goto('https://www.example.com');
console.log(await page.title());
await browser.close();
}
scrapeWebsite();
El método page.authenticate() proporciona las credenciales necesarias al servidor proxy. Este método debe llamarse antes de navegar a la página de destino.
Consideraciones sobre Proxy por Solicitud
Puppeteer aplica la configuración del proxy globalmente para toda la instancia del navegador. Si necesita diferentes proxies para diferentes solicitudes, deberá iniciar varias instancias del navegador, cada una configurada con un proxy diferente. Alternativamente, considere usar una librería que intercepte las solicitudes y aplique la configuración del proxy por solicitud (menos común, más compleja).
Configuración de Proxies con Playwright
Playwright es otra potente librería de Node.js para la automatización del navegador y las pruebas de extremo a extremo. Al igual que Puppeteer, admite la configuración de proxies para sus instancias de navegador.
Lanzamiento de Playwright con un Proxy
Playwright ofrece una forma más directa de configurar proxies en comparación con Puppeteer, utilizando la propiedad proxy en las opciones de launch.
const { chromium } = require('playwright');
async function scrapeWebsite() {
const browser = await chromium.launch({
proxy: {
server: `http://${process.env.PROXY_HOST}:${process.env.PROXY_PORT}`,
username: process.env.PROXY_USERNAME,
password: process.env.PROXY_PASSWORD,
}
});
const page = await browser.newPage();
await page.goto('https://www.example.com');
console.log(await page.title());
await browser.close();
}
scrapeWebsite();
Este enfoque es más limpio y explícito, ya que admite directamente la autenticación de nombre de usuario y contraseña dentro de la configuración del proxy.
Proxy por Contexto
Playwright admite contextos de navegador, lo que permite sesiones de navegación aisladas dentro de una única instancia de navegador. Cada contexto puede tener su propia configuración de proxy. Esto es útil para ejecutar tareas paralelas, cada una con un proxy diferente.
const { chromium } = require('playwright');
async function scrapeWebsite() {
const browser = await chromium.launch();
const context = await browser.newContext({
proxy: {
server: `http://${process.env.PROXY_HOST}:${process.env.PROXY_PORT}`,
username: process.env.PROXY_USERNAME,
password: process.env.PROXY_PASSWORD,
}
});
const page = await context.newPage();
await page.goto('https://www.example.com');
console.log(await page.title());
await browser.close();
}
scrapeWebsite();
Tabla Comparativa: Configuración de Proxy
| Característica | Axios | Puppeteer | Playwright |
|---|---|---|---|
| Configuración | Opción proxy en la configuración de la solicitud |
Argumento de lanzamiento --proxy-server, page.authenticate() |
Opción proxy en launch o newContext |
| Autenticación | username y password en proxy |
page.authenticate() |
username y password en proxy |
| Soporte HTTPS | Sí, misma configuración que HTTP | Sí, usar https:// en --proxy-server |
Sí, misma configuración que HTTP |
| Proxy por Solicitud | No, global para la instancia de Axios | No, global para la instancia del navegador | Sí, usando contextos de navegador |
Mejores Prácticas
- Usar Variables de Entorno: Almacene las credenciales del proxy en variables de entorno para evitar codificarlas directamente en su código.
- Manejar Errores: Implemente el manejo de errores para gestionar elegantemente los problemas de conexión del proxy.
- Rotar Proxies: Para el web scraping, rote los proxies con frecuencia para evitar bloqueos de IP. Considere usar un pool de proxies.
- Pruebe su Configuración: Verifique que su proxy funciona correctamente comprobando su dirección IP a través del proxy. Utilice sitios web como whatismyipaddress.com{rel="nofollow"}.
- Proxies Seguros: Utilice proxies seguros (HTTPS o SOCKS5) para cifrar su tráfico.
- Consideraciones Legales: Asegúrese de que sus actividades de web scraping cumplan con los términos de servicio del sitio web de destino y todas las leyes aplicables.
Conclusión
Configurar proxies en Node.js con librerías como axios, Puppeteer y Playwright es esencial para diversas tareas, incluyendo el web scraping, la elusión de restricciones geográficas y la mejora de la privacidad. Cada librería ofrece diferentes enfoques para la configuración del proxy, siendo Playwright el que proporciona el método más flexible y directo, especialmente para proxies autenticados y configuraciones por contexto. Siguiendo las mejores prácticas descritas en este artículo, podrá utilizar eficazmente los proxies en sus aplicaciones Node.js.