En esta guía, aprenderás:
- Qué es cURL Impersonate
- Los motivos del proyecto y cómo funciona
- Cómo usarlo a través de la línea de comandos
- Cómo usarlo en Python
- Técnicas y aspectos avanzados
¡Vamos a ello!
¿Qué es cURL Impersonate?
cURL Impersonate es una versión especial de cURL diseñada para imitar el comportamiento de los principales navegadores (es decir, Chrome, Edge, Safari y Firefox). En detalle, esta herramienta realiza apretones de manos TLS y HTTP que se parecen mucho a los de los navegadores reales.
El cliente HTTP se puede usar a través de la herramienta de línea de comandos curl-impersonate
, similar a curl
normal, o como biblioteca en Python.
Estos son los navegadores en los que se puede suplantar la identidad:
Navegador | Sistema operativo simulado | Secuencia de comandos de empaquetado |
Chrome 99 | Windows 10 | curl_chrome99 |
Chrome 100 | Windows 10 | curl_chrome100 |
Chrome 101 | Windows 10 | curl_chrome101 |
Chrome 104 | Windows 10 | curl_chrome104 |
Chrome 107 | Windows 10 | curl_chrome107 |
Chrome 110 | Windows 10 | curl_chrome110 |
Chrome 116 | Windows 10 | curl_chrome116 |
Chrome 99 | Android 12 | curl_chrome99_android |
Edge 99 | Windows 10 | curl_edge99 |
Edge 101 | Windows 10 | curl_edge101 |
Firefox 91 ESR | Windows 10 | curl_ff90esr |
Firefox 95 | Windows 10 | curl_ff95 |
Firefox 98 | Windows 10 | curl_ff98 |
Firefox 100 | Windows 10 | curl_ff100 |
Firefox 102 | Windows 10 | curl_ff102 |
Firefox 109 | Windows 10 | curl_ff109 |
Firefox 117 | Windows 10 | curl_ff117 |
Safari 15.3 | macOS Big Sur | curl_safari15_3 |
Safari 15.5 | macOS Monterey | curl_safari15_5 |
Cada navegador compatible tiene un script de empaquetado específico. Esto configura curl-impersonate
con los encabezados, banderas y ajustes apropiados para simular un navegador específico.
Cómo funciona curl-impersonate
Cuando envías una solicitud a un sitio web a través de HTTPS, se produce un proceso denominado protocolo de enlace TLS . Durante este apretón de manos, se comparten detalles sobre el cliente HTTP con el servidor web, creando una huella TLS única.
Los clientes HTTP tienen capacidades y configuraciones que difieren de las de un navegador estándar. Esta discrepancia da como resultado una huella digital TLS que puede revelar fácilmente el uso de clientes HTTP. Como resultado, las medidas antibots utilizadas por el sitio de destino pueden detectar tus solicitudes como automatizadas y, potencialmente, bloquearlas.
cURL Impersonate soluciona este problema modificando la herramienta estándar curl
para que tu huella digital TLS coincida con la de los navegadores reales. Así es como logra el objetivo:
- Modificación de la biblioteca TLS: para la versión Chrome de
curl-impersonate
,curl
se compila con boringSSL, la biblioteca TLS de Google. Para la versión de Firefox,curl
se compila con NSS, la biblioteca TLS que utiliza Firefox. - Ajustes de configuración: modifica la forma en que cURL configura varias extensiones de TLS y opciones de SSL para imitar la configuración de los navegadores reales. También añade compatibilidad con las nuevas extensiones de TLS que suelen utilizar los navegadores.
- Personalización del protocolo de enlace HTTP/2: cambia la configuración que cURL usa para las conexiones HTTP/2 para alinearla con la de los navegadores reales.
- Indicadores no predeterminados: se ejecuta con indicadores específicos no predeterminados, como
--ciphers
,--curves
y algunos encabezados -H, lo que ayuda aún más a imitar el comportamiento del navegador.
Por lo tanto, curl-impersonate
hace que las solicitudes curl
aparezcan desde la perspectiva de la red como si las hubiera realizado un navegador real. ¡Esto es útil para eludir muchos mecanismos de detección de bots!
curl-impersonate: tutorial de línea de comandos
Sigue los pasos que se indican a continuación para aprender a usar cURL Impersonate desde la línea de comandos.
Nota: para completar la información, se mostrarán varios métodos de instalación. Sin embargo, solo debes elegir uno. El método recomendado es usar Docker.
Instalación desde binarios precompilados
Puedes descargar archivos binarios precompilados para Linux y macOS desde la página de versiones de GitHub del proyecto. Estos binarios contienen un curl-suplantate
compilado estáticamente. Antes de usarlos, asegúrate de tener instalado lo siguiente:
- NSS (Network Security Services): un conjunto de bibliotecas diseñadas para apoyar el desarrollo multiplataforma de aplicaciones cliente y servidor habilitadas para la seguridad. NSS se usa en productos de Mozilla como Firefox y Thunderbird para gestionar el protocolo TLS.
- Certificados de CA: conjunto de certificados digitales que autentican la identidad de los servidores y los clientes durante las comunicaciones seguras. Se aseguran de que la conexión a un servidor sea fiable al verificar que el certificado del servidor haya sido firmado por una CA reconocida (Certificate Authority).
Para cumplir los requisitos previos, en Ubuntu, ejecuta:
sudo apt install libnss3 nss-plugin-pem ca-certificates
En Red Hat, Fedora o CentOS, ejecuta:
yum install nss nss-pem ca-certificates
En Archlinux, lanza:
pacman -S nss ca-certificates
En macOS, ejecuta este comando:
brew install nss ca-certificates
Además, asegúrate de tener zlib
instalado en tu sistema, ya que los paquetes binarios precompilados están comprimidos con gzip.
Instalación mediante Docker
Las imágenes de Docker, basadas en Alpine Linux y Debian, con curl-impersonate compiladas y listas para usar están disponibles en Docker Hub. Estas imágenes incluyen el binario y todos los scripts de empaquetado necesarios.
Las imágenes de Chrome (*-chrome
) pueden suplantar a Chrome, Edge y Safari. En cambio, las imágenes de Firefox (*-ff
) pueden suplantar a Firefox.
Para descargar la imagen de Docker que prefiera, utiliza uno de los siguientes comandos.
Para la versión de Chrome en Alpine Linux:
docker pull lwthiker/curl-impersonate:0.5-chrome
Para la versión de Firefox en Alpine Linux:
docker pull lwthiker/curl-impersonate:0.5-ff
Para la versión de Chrome en Debian:
docker pull lwthiker/curl-impersonate:0.5-chrome-slim-buster
Para la versión de Firefox en Debian:
docker pull lwthiker/curl-impersonate:0.5-ff-slim-buster
Una vez descargado, como verás, puedes ejecutar curl-impersonate
usando un comando docker run.
Instalación desde paquetes de distribución
En Arch Linux, curl-impersonate
está disponible a través del paquete AUR curl-impersonate-bin
.
En macOS, puedes instalar el paquete Homebrew no oficial para la versión de Chrome con los siguientes comandos:
brew tap shakacode/brew
brew install curl-impersonate
Uso básico
Independientemente del método de instalación, ahora puedes ejecutar un comando curl-impersonate
con esta sintaxis:
curl-impersonate-wrapper [options] [target-url]
O, de manera equivalente, en Docker, ejecuta algo como:
docker run --rm lwthiker/curl-impersonate:[curl-impersonate-version]curl-impersonate-wrapper [options] [target_url]
Dónde:
curl-impersonate-wrapper
es el envoltorio cURL Impersonate que quieres usar (p. ej.,curl_chrome116
,curl_edge101
,curl_ff117
,curl_safari15_5
, etc.).options
son las banderas opcionales que se pasarán a cURL.target-url
es la URL de la página web a la que se va a realizar una solicitud HTTP.
Tenga cuidado al especificar opciones personalizadas, ya que algunos indicadores alteran la firma TLS de cURL, lo que puede hacer que sea detectable. Para obtener más información, consulta nuestra introducción a CURL.
Ten en cuenta que los contenedores configuran automáticamente una colección predeterminada de encabezados HTTP. Para personalizar estos encabezados, modifica los scripts del contenedor para adaptarlos a tus necesidades.
Ahora, usemos curl-impersonate
para hacer una solicitud a la página principal de Wikipedia con un contenedor de Chrome:
curl_chrome110 https://www.wikipedia.org
O, si eres usuario de Docker:
docker run --rm lwthiker/curl-impersonate:0.5-chrome curl_chrome110 https://www.wikipedia.org
El resultado será:
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<title>Wikipedia</title>
<meta name="description" content="Wikipedia is a free online encyclopedia, created and edited by volunteers around the world and hosted by the Wikimedia Foundation.">
<!-- omitted for brevity... -->
¡Genial! El servidor devolvió el HTML de la página deseada como si estuvieras accediendo a ella a través de un navegador.
Ahora puedes utilizar cURL Impersonate para raspado web tal y como usarías cURL para raspado web.
curl-impersonate
: tutorial de Python
El uso de la línea de comandos es excelente para realizar pruebas, pero los procesos de raspado web suelen basarse en scripts personalizados escritos en lenguajes como Python. ¡Descubre los mejores lenguajes de programación para el raspado web!
Afortunadamente, puedes usar cURL Impersonate en Python gracias a curl-cffi
. Este es un enlace de Python para curl-impersonate
a través de cffi
. En particular, curl-cffi
puede suplantar las huellas digitales TLS/JA3 y HTTP/2 de los navegadores para conectarse a páginas web sin ser bloqueado.
¡Descubre cómo usarlo en la sección paso a paso que aparece a continuación!
Requisitos previos
Antes de empezar, asegúrate de tener:
- Python 3.8+ instalado en tu máquina
- Un proyecto de Python con un entorno virtual configurado
Opcionalmente, se recomienda un IDE de Python como Visual Studio Code con la extensión Python .
Instalación
Instala curl_cfii
mediante pip de la siguiente manera:
pip install curl_cfii
Uso
curl_cffi
proporciona una API curl
de bajo nivel y una API similar a las solicitudes de alto nivel. Más información en la documentación oficial.
Por lo general, querrás usar una API similar a las solicitudes. Para ello, importa requests
de curl_cffi
:
from curl_cffi import requests
Ahora puedes usar la versión Chrome de cURL Impersonate en Python para conectarte a una página web con:
response = requests.get("https://www.wikipedia.org", impersonate="chrome")
Print the response HTML with:
print(response.text)
Put it all together, and you will get:
from curl_cffi import requests
# make a GET request to the target page with
# the Chrome version of curl-impersonate
response = requests.get("https://www.wikipedia.org", impersonate="chrome")
# print the server response
print(response.text)
Run the above Python script, and it will print:
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<title>Wikipedia</title>
<meta name="description" content="Wikipedia is a free online encyclopedia, created and edited by volunteers around the world and hosted by the Wikimedia Foundation.">
<!-- omitted for brevity... -->
¡Genial! Ahora estás listo para realizar el raspado web en Python, tal como lo harías con Requests y Beautiful Soup. Para obtener más información, sigue nuestra guía sobre web scraping con Python.
Uso avanzado de cURL Impersonate
¡Es hora de explorar algunos usos y técnicas avanzadas!
Integración de proxy
Simular las huellas digitales del navegador puede no ser suficiente. Es posible que las soluciones antibots sigan bloqueándote, especialmente si realizas demasiadas solicitudes automatizadas en poco tiempo. ¡Aquí es donde entran en juego los proxies!
Enrutando tu petición a través de un servidor proxy, puedes obtener una nueva dirección IP y proteger tu identidad.
Supongamos que la URL de tu servidor proxy es:
http://84.18.12.16:8888
cURL Impersonate admite la integración de proxy a través de la línea de comandos mediante el indicador -x:
curl-impersonate -x http://84.18.12.16:8888 https://httpbin.org/ip
Para obtener más información, lee cómo configurar un proxy en cURL.
En Python, puedes configurar un proxy de forma similar a como lo harías con solicitudes
:
from curl_cffi import requests
proxies = {"http": "http://84.18.12.16:8888", "https": "http://84.18.12.16:8888"}
response = requests.get("https://httpbin.org/ip", impersonate="chrome", proxies=proxies)
Para obtener información adicional, consulta cómo integrar un proxy con las solicitudes de Python.
Integración con Libcurl
libcurl-impersonate es una versión compilada de libcurl
que incluye las mismas funciones de cURL Impersonate. También ofrece una API extendida para ajustar los detalles de TLS y las configuraciones de los encabezados.
libcurl-impersonate
se puede instalar usando el paquete precompilado . Su objetivo es facilitar la integración de cURL Impersonate en bibliotecas de varios lenguajes de programación, como el paquete Python curl-cffi
.
Conclusión
En este artículo, has aprendido qué es cURL Impersonate, cómo funciona y cómo usarlo tanto a través de CLI como en Python. Ahora entiendes que es una herramienta para hacer peticiones HTTP simulando la huella TLS de los navegadores del mundo real.
El problema es que las soluciones antibots avanzadas, como Cloudflare, pueden seguir detectando que tus solicitudes provienen de un bot. ¿Cuál es la solución? API Scraper de Bright Data: una solución de raspado integral, todo en uno y de próxima generación.
La API Scraper proporciona todo lo que necesitas para realizar solicitudes web automatizadas mediante cURL o cualquier otro cliente HTTP. Esta solución completa gestiona la huella digital del navegador, la resolución de CAPTCHA y la rotación de IP para que puedas eludir cualquier tecnología antibot. ¡Realizar solicitudes HTTP automatizadas nunca ha sido tan fácil!
Regístrate ahora para obtener una prueba gratuita de la infraestructura de raspado web de Bright Data o habla con uno de nuestros expertos en datos sobre nuestras soluciones de raspado.
No se requiere tarjeta de crédito