Node.js es un entorno de ejecución de JavaScript popular que te permite crear aplicaciones de servidor y de red. Por ejemplo, si necesitas obtener datos de una API o sitio web remoto en Node.js, puedes usar un servidor proxy web que actúa como intermediario entre tu aplicación e internet. Esto te permite evitar restricciones de red, acceder a contenido bloqueado geográficamente y ocultar tu dirección IP.
La mayoría de las aplicaciones JavaScript modernas usan la API Fetch para hacer solicitudes HTTP. Está disponible en navegadores web como una función incorporada, y desde Node.js v16, está disponible sin dependencias externas. Sin embargo, hay un problema: la funcionalidad fetch incorporada en Node.js refleja lo disponible en navegadores web y no puede trabajar con proxies.
Afortunadamente, hay una solución simple: la biblioteca node-fetch. Esta biblioteca incluye una API Fetch para Node.js que agrega funcionalidad adicional específica de Node.js, incluyendo la capacidad de trabajar con agentes HTTP de Node.js. Un agente HTTP es una herramienta que gestiona el pooling de conexiones, permitiéndote reutilizar conexiones para solicitudes HTTP. Esto significa que puedes usar un agente HTTP para configurar tus solicitudes fetch a medida que pasan por el proxy.
En este artículo, aprenderás a usar node-fetch junto con la biblioteca https-proxy-agent para crear un agente HTTP que soporte tanto proxies HTTP como HTTPS. También aprenderás sobre el servicio de proxy de Bright Data servicio de proxy, que ofrece una variedad de tipos de proxy y funciones para tus necesidades de scraping web.
Cómo usar un proxy con node-fetch
Antes de comenzar este tutorial, necesitas los siguientes requisitos previos:
- Una instalación funcional de Node.js.
- Acceso a un proxy web. Alternativamente, para fines de prueba, puedes configurar tu propio proxy web usando Node.js.
Una vez que tengas estos requisitos previos, ¡estás listo para comenzar!
Crear un proyecto Node.js
Lo primero que debes hacer es crear un proyecto Node.js e inicializarlo con npm. Para hacer esto, abre una terminal y ejecuta los siguientes comandos:
mkdir node-fetch-proxy
cd node-fetch-proxy
npm init -y
Este comando crea una carpeta llamada node-fetch-proxy, navega dentro de ella, y crea un archivo package.json con algunos valores predeterminados.
Instalar node-fetch y https-proxy-agent
A continuación, necesitas instalar las bibliotecas node-fetch y https-proxy-agent como dependencias de tu proyecto con el siguiente comando:
npm install –-save node-fetch https-proxy-agent
Este comando instala las bibliotecas en la carpeta node_modules de tu proyecto y actualiza tu archivo package.json en consecuencia.
Usa HttpsProxyAgent y node-fetch para hacer llamadas HTTP a través de un proxy
Después de instalar las bibliotecas node-fetch y https-proxy-agent, necesitas usar la clase HttpsProxyAgent de la biblioteca https-proxy-agent junto con la función fetch de la biblioteca node-fetch para hacer llamadas HTTP a través de un proxy. Para hacer esto, crea un archivo llamado proxy.mjs en la carpeta de tu proyecto y agrega el siguiente código:
import fetch from 'node-fetch';
import { HttpsProxyAgent } from 'https-proxy-agent';
// Reemplaza <proxy_url> con tu URL de proxy real
const agent = new HttpsProxyAgent('<proxy_url>');
// Usa fetch con la opción agent para hacer una solicitud HTTP a través del proxy
// Reemplaza <target_url> con la URL que deseas solicitar
fetch('<target_url>', { agent })
.then((response) => response.text())
.then((text) => console.log(text))
.catch((error) => console.error(error));
Este código completa las siguientes acciones:
- Importa la función
fetchde la bibliotecanode-fetch, que proporciona una API Fetch compatible con navegadores para Node.js. - Importa la clase
HttpsProxyAgentde la bibliotecahttps-proxy-agent, que crea un agente HTTP que soporta proxies HTTPS. - Crea una instancia de
HttpsProxyAgentcon tu URL de proxy. Necesitas reemplazar<proxy_url>con tu URL de proxy real, que debe tener el siguiente formato:http://usuario:contraseña@host:puerto. - Usa la función
fetchcon la opción agent para hacer una solicitud HTTP a través del proxy. Necesitas reemplazar<target_url>con la URL que deseas solicitar, que puede ser cualquier URL HTTP o HTTPS válida. - Maneja la respuesta e imprime cualquier error que ocurra.
Guarda el código y ejecuta el siguiente comando:
node proxy.mjs
Este comando ejecuta tu código y hace una solicitud HTTP a través del proxy. Deberías ver el texto de respuesta o cualquier error en tu terminal.
Limitaciones al usar un proxy con node-fetch
Si bien este enfoque funciona bien cuando se usa un proxy simple, descubrirás que muchos casos de uso del mundo real, como el scraping web, requieren un enfoque más sofisticado. Muchos sitios web y API web bloquean las direcciones IP de proxies conocidos, dificultando la obtención de los datos que necesitas.
Además, los sitios pueden tener restricciones geográficas que ocultan contenido a los visitantes según su ubicación. Por ejemplo, algunos periódicos de EE. UU. bloquean a los visitantes europeos de sus sitios web debido a dificultades para cumplir con el Reglamento General de Protección de Datos (GDPR) y la Directiva ePrivacy.
Afortunadamente, los proxies más sofisticados, como los ofrecidos por el servicio de proxy de Bright Data, proporcionan varios tipos de proxies que ayudan a los usuarios a sortear estas limitaciones.
Servicio de Proxy de Bright Data
Si buscas un servicio de proxy confiable y escalable para scraping web, no busques más. Bright Data es un proveedor líder de soluciones de proxy, que ofrece 400M+ monthly direcciones IP en 195 países, con un 99.9 por ciento de tiempo de actividad.
Con los servidores proxy de Bright Data, puedes elegir entre diferentes tipos de proxies, como residenciales, de centro de datos, de proveedor de servicios de internet (ISP), móviles o super proxies, dependiendo de tu caso de uso y presupuesto. Esta variedad de opciones es útil al crear un scraper web que necesita obtener contenido de sitios que bloquean direcciones IP de proxy conocidas.
En lugar de depender de un proxy genérico que se ejecuta en una ubicación que no puedes controlar, los proxies de Bright Data te permiten elegir el tipo de proxy que mejor coincida con el tipo de usuario que normalmente accede al contenido que intentas obtener. También puedes acceder a funciones avanzadas, como geo-targeting, rotación de IP y control de sesión, que aseguran que tu aplicación no sea bloqueada.
Tipos de Proxy de Bright Data
Bright Data ofrece diferentes tipos de proxies para diferentes escenarios de scraping web. A continuación, algunos de los proxies que ofrecen:
- El proxy residencial canaliza tus consultas de internet a través de dispositivos genuinos, como computadoras personales o portátiles, que están conectados a la web mediante un ISP residencial. Estos proxies sobresalen en actividades de scraping web porque se mezclan con usuarios comunes, lo que reduce la posibilidad de que tus solicitudes mediante proxy sean bloqueadas.
- Los servidores proxy actúan como una puerta de enlace y te otorgan entrada a la extensa red de proxies residenciales de Bright Data. Con una sola URL de super proxy, puedes conectarte a cualquier proxy residencial sin necesidad de designar una dirección IP particular. Además, el super proxy ofrece la flexibilidad de ajustar múltiples configuraciones, incluyendo seleccionar el país, ciudad, ISP o ASN del proxy residencial que deseas emplear.
- El proxy de centro de datos usa una dirección IP asignada a un servidor ubicado dentro de una instalación de centro de datos. Los proxies de centro de datos son propensos a la detección y posterior bloqueo por parte de sitios web y API, pero siguen siendo útiles para aplicaciones que acceden a datos de URL que no intentan bloquear solicitudes de proxy. Son más apropiados para proyectos de scraping web donde tu tráfico de scraping no necesita provenir de direcciones IP residenciales, comerciales o móviles.
- El proxy ISP es una dirección IP asignada a un servidor alojado por un ISP. Los proxies ISP son similares a los proxies residenciales, con la diferencia de que sus direcciones IP pueden ser IP residenciales o comerciales. Esto los hace adecuados cuando se hace scraping de sitios que esperan una mezcla de tráfico residencial y comercial.
Gestor de Proxy y APIs
Con tantas opciones, gestionar el uso de tu proxy puede ser complicado. Afortunadamente, el Gestor de Proxy de Bright Data Proxy Manager te permite configurar y gestionar fácilmente tus proxies, monitorear tu uso y rendimiento, y solucionar cualquier problema.
Además, puedes usar las API e integraciones de Bright Data para integrar proxies en tu código sin problemas. La API del Navegador de Scraping facilita el uso de proxies desde herramientas con las que probablemente estés familiarizado (es decir Playwright y Puppeteer), y el Web Unlocker te ayuda a superar bloqueos que normalmente impedirían que tu scraper acceda a un sitio.
Conclusión
En este artículo, aprendiste a usar la biblioteca node-fetch con la biblioteca https-proxy-agent para crear un agente HTTP que soporte proxies HTTPS. También aprendiste sobre el servicio de proxy de Bright Data, que ofrece una variedad de tipos de proxy y funciones para tus necesidades de scraping web.
Usar un proxy web con solicitudes fetch en Node.js puede ayudarte a superar restricciones de red, acceder a contenido bloqueado geográficamente u ocultar tu dirección IP. Sin embargo, el proxy simple usando node-fetch y https-proxy-agent puede no ser suficiente para algunos escenarios de scraping web, especialmente si necesitas anonimato, geo-targeting, rotación de IP u otras funciones avanzadas. En estos casos, deberías considerar usar un proxy de Bright Data en su lugar.
Los servicios de proxy de Bright Data ofrecen una amplia gama de funciones que pueden ayudarte a acceder a cualquier sitio web o API sin ser bloqueado o ralentizado. También puedes elegir entre diferentes tipos de proxies dependiendo de tu caso de uso y presupuesto. Para comenzar con el servicio de proxy de Bright Data, regístrate hoy.