curl-impersonate es una compilación especial de curl que puede imitar navegadores web principales como Chrome, Edge, Safari y Firefox
- Realiza el handshake de TLS y HTTP igual que un navegador real
- Se puede usar como herramienta de línea de comandos o integrarse como biblioteca
- Importancia
- Cuando un cliente HTTP accede a un sitio web con TLS, realiza un handshake de TLS, y en ese proceso se pueden identificar las características del cliente
curl-impersonate hace que esos handshakes sean iguales a los de un navegador real para que los servicios web no puedan identificar al cliente
- Implementación técnica
- Compila curl usando BoringSSL, la biblioteca TLS de Google.
- Modifica varias extensiones TLS y opciones SSL.
- Cambia la configuración de conexión HTTP/2.
- Ejecuta curl con flags no estándar.
- Navegadores compatibles
- Puede imitar varias versiones de navegadores como Chrome, Edge, Safari y Firefox.
- Incluye scripts para cada navegador.
- Uso básico
- Se incluyen scripts wrapper para ejecutar
curl-impersonate para cada navegador compatible.
- Ejemplo:
curl_chrome123 https://www.wikipedia.org
- Uso avanzado
- Se puede configurar mediante API usando la biblioteca
libcurl-impersonate.
- La biblioteca se puede reemplazar en tiempo de ejecución usando la variable de entorno
CURL_IMPERSONATE.
- Instalación
- Hay binarios precompilados para Windows, Linux y macOS en la página de releases de GitHub.
- También se puede usar mediante una imagen de Docker.
- Este repositorio es un fork más activo de
curl-impersonate y tiene las siguientes diferencias principales
- Soporte para Encrypted Client Hello (ECH): se agregó la función ECH introducida en Chrome 119.
- Soporte para compresión ZSTD: soporte para el protocolo de compresión ZSTD introducido en Chrome 123.
- Soporte para la curva X25519Kyber768: se agregó la nueva curva criptográfica introducida en Chrome 124.
- Ampliación de opciones de huella HTTP/2 de Akamai: se reforzaron las opciones de huella HTTP/2, incluido Safari.
- Actualización a la versión más reciente de curl: se actualizó a curl 8.7.1.
- Configuración del orden de extensiones TLS y GREASE: se agregaron opciones para activar/desactivar GREASE y definir el orden de las extensiones TLS.
- Preparación para soporte de navegadores basados en Webkit y Gecko: está en curso el trabajo en un binario único para Chrome y Firefox.
1 comentarios
Opiniones de Hacker News
Hay un proyecto que, mediante bindings de Python, ofrece una API similar a
requests. Esto permite hacer solicitudes HTTP fácilmente sin ejecutar toda la pila del navegadorEn ciertos sitios se necesita detección de navegador basada en JavaScript. Incluso puede neutralizar
puppeteer-extra-plugin-stealthEl script de compilación es complejo. Usa autotools, pero hay que compilar desde un subdirectorio
makefuncionó mejor-Werror. La lista de dependencias está incompletalibc++-XX-devylibc++abi-XX-dev. El proceso de instalación está algo incompletoHizo un proyecto similar para Python. Está buscando a alguien que ayude con los builds para Windows
Solo unos pocos sitios web usan fingerprinting JA3/JA4. También hay sitios que usan técnicas avanzadas para correlacionar headers y fingerprints
Usa
ja3proxypara exponer un proxy HTTP a través deutls. No tiene funciones especiales para HTTP/2En Go, el paquete
tls-clientes el que más se usaHay comentarios sobre cómo las granjas de scrapers con IA hacen DDoS a los sitios, y resulta interesante
Cree que este tipo de proyectos no debería publicarse. El enemigo podría estar entre nosotros
Si necesitas leer datos de ciertos sitios web, usan la información del handshake para impedir que se lean por software