Volver al blog

httpcloak Web Scraping: Huellas dactilares de navegador Full-Stack en Python

Michael Lee
Michael Lee

Expert Network Defense Engineer

22-Jul-2026

TL;DR:

  • httpcloak es un cliente HTTP de Python que emula un navegador a través de toda la pila de red: TLS, HTTP/2, HTTP/3 y TCP, no solo el apretón de manos de TLS.
  • Una llamada httpcloak.get(url, preset="chrome-146") presenta un JA3, JA4 y una huella digital HTTP/2 de un navegador juntos, sin proceso de navegador.
  • Una solicitud tiene más de una huella digital: el hash JA3 cambia en cada ejecución debido a GREASE, mientras que las huellas JA4 y HTTP/2 permanecen constantes.
  • httpcloak no ejecuta JavaScript, por lo que en una página renderizada por el cliente devuelve la estructura vacía; la guía lo prueba con 0 bloques de cita de httpcloak y 10 de Scrapeless con renderizado.
  • Usa httpcloak cuando una huella de red es el muro, y Scrapeless cuando la página necesita renderizado, desafíos superados o rotación de IP.
  • Comienza con el plan gratuito de Scrapeless para las páginas que una huella digital por sí sola no puede alcanzar.

Un servidor puede identificar una solicitud en varios niveles antes de leer un byte de la respuesta. El TLS ClientHello es uno. Los marcos SETTINGS de HTTP/2 son otro. Las opciones TCP son un tercero. Un cliente que solo corrige la capa TLS aún destaca en las demás, y un detector que verifica más de una capa señala la discrepancia. httpcloak aborda toda la pila a la vez al tomar prestada la huella digital de un navegador real en todos ellos.

Esta guía lee las huellas digitales que produce httpcloak, explica por qué una de ellas cambia entre ejecuciones mientras que las otras no, y luego dibuja la línea que httpcloak no puede cruzar. Donde una página necesita un navegador real, la API Universal de Scraping de Scrapeless toma el control. Cada valor a continuación proviene de una ejecución real.

Lo que emula httpcloak

httpcloak es un cliente estilo requests que reproduce la huella digital de un navegador en varias capas. En la capa TLS, presenta un JA3 y JA4 de un navegador. En la capa de transporte, reproduce los marcos SETTINGS de HTTP/2, los tamaños de ventana y las prioridades de flujo que en conjunto forman la huella digital definida en el protocolo HTTP/2, y se extiende a HTTP/3 y opciones TCP. Seleccionas un objetivo con un preset, y el repositorio de httpcloak lista las versiones de navegador que incluye, desde chrome-146 hasta firefox-133 y safari-18.

Lo que httpcloak no hace es ejecutar un navegador. No hay motor de JavaScript y no hay renderizado. Es un conjunto de huellas digitales, no un navegador.

Instalación

httpcloak es una única instalación de pip.

bash Copy
pip install httpcloak

Leer una huella digital de pila completa

Pasa un preset y httpcloak construye la firma de red de ese navegador. La solicitud a continuación pide a un servicio de fingerprinting que informe las capas que vio.

python Copy
import httpcloak

response = httpcloak.get("https://tls.peet.ws/api/all", preset="chrome-146", timeout=30)
data = response.json()
print("versión http:", data["http_version"])
print("hash ja3:", data["tls"]["ja3_hash"])
print("ja4:", data["tls"]["ja4"])
print("hash http2 akamai:", data["http2"]["akamai_fingerprint_hash"])

El servicio informa HTTP/2, un hash JA3, una huella digital JA4 y una huella digital HTTP/2, todo de una única solicitud.

text Copy
versión http: h2
hash ja3: 0f368595c1c27a2c9024014615c2a295
ja4: t13d1516h2_8daaf6152771_d8a2da3f94cd
hash http2 akamai: 52d84b11737d980aef856699f885ca86

Una solicitud, varias huellas digitales

Ejecuta ese script dos veces y el hash ja3 cambia, mientras que el ja4 y el hash http2 akamai permanecen iguales. Eso no es inestabilidad. El mecanismo GREASE inserta valores reservados aleatorios en el TLS ClientHello, y JA3 hashea esos valores, así que JA3 cambia entre conexiones, exactamente como lo hace el verdadero Chrome. La huella digital JA4 ordena y excluye los valores GREASE, por lo que es estable, y la huella digital HTTP/2 proviene de marcos SETTINGS fijos, así que también es estable. La lección es que una solicitud tiene varias huellas digitales, y verificar solo JA3 ve ruido donde la señal duradera reside en JA4 y la capa HTTP/2.

Donde httpcloak se detiene

Una huella digital de red de pila completa permite que una solicitud pase un chequeo de huellas digitales, pero no renderiza la página. En un sitio que crea su contenido con JavaScript, httpcloak devuelve exactamente lo que envió el servidor, que es una estructura vacía, y ninguna cantidad de precisión en la huella digital la llenará. Aquí es donde se requiere una herramienta de renderizado.

Configura tu clave de Scrapeless en la consola. Usa la clave real en tiempo de ejecución y mantén el marcador fuera de tu fuente.

bash Copy
export SCRAPELESS_API_KEY="sk_tu_clave_aqui"

El script a continuación obtiene una página de citas renderizada por JavaScript de dos maneras: httpcloak con una huella digital de navegador completa, y Scrapeless con renderizado activado.

python Copy
import json
import os
import urllib.request

import httpcloak

JS_PAGE = "https://quotes.toscrape.com/js/"

response = httpcloak.get(JS_PAGE, preset="chrome-146", timeout=30)
print("estado de httpcloak:", response.status_code)
print("bloques de citas de httpcloak:", response.text.count('class="quote"'))


def scrapeless(url: str) -> str:
    payload = json.dumps(
        {"actor": "unlocker.webunlocker", "input": {"url": url, "js_render": True, "headless": True}}
    ).encode()
    request = urllib.request.Request(
        "https://api.scrapeless.com/api/v2/unlocker/request",
        data=payload,
        headers={"x-api-token": os.environ["SCRAPELESS_API_KEY"], "Content-Type": "application/json"},
        method="POST",
    )
    with urllib.request.urlopen(request, timeout=90) as response:
        return json.loads(response.read())["data"]


html = scrapeless(JS_PAGE)
print("bloques de citas de scrapeless:", html.count('class="quote"'))

httpcloak obtiene un 200 limpio y cero citas, porque las citas son generadas por JavaScript y nunca se ejecuta. Scrapeless renderiza la página y las citas aparecen.

text Copy
estado de httpcloak: 200
bloques de citas de httpcloak: 0
bloques de citas de scrapeless: 10

El 200 es la trampa: la solicitud tiene éxito, así que nada parece estar mal, pero el contenido no está presente. Las dos herramientas responden a diferentes problemas. httpcloak reproduce la huella digital de red de un navegador a través de capas; no renderiza, no limpia un desafío, ni rota IPs. Para obtener una visión más amplia de lo que un servidor mide, la guía sobre huella digital del navegador cubre las señales más allá de la pila de red.

Antes de ejecutar cualquiera de esto en un sitio, lee su robots.txt y los términos. El Protocolo de Exclusión de Robots establece qué rutas un sitio pide a los clientes automatizados que eviten, y honrarlo mantiene un scraper sostenible.

¿Listo para las páginas que una huella digital por sí sola no puede alcanzar? Crea una cuenta gratuita de Scrapeless y renderízalas.

Conclusión

httpcloak es la herramienta adecuada cuando la pared es una huella digital de red, y es exhaustiva al respecto: JA3, JA4, HTTP/2, HTTP/3 y TCP desde una solicitud, seleccionados por un preset de navegador. Su límite es igualmente claro, porque no ejecuta JavaScript y devuelve el contenedor vacío de una página renderizada por el cliente. Lee de nuevo las huellas digitales para entender cuáles son estables, utiliza httpcloak donde el apretón de manos es la pared, y entrega la página a Scrapeless cuando necesite renderizado, un desafío despejado, o una nueva IP. Comienza desde los scripts anteriores y empareja la herramienta con la verificación que tienes frente a ti.

Empieza con el plan gratuito de Scrapeless para páginas renderizadas, y consulta los precios de Scrapeless cuando dimensionas un trabajo recurrente.

FAQ

P: ¿Qué capas emula httpcloak?

httpcloak reproduce una huella digital de navegador en la capa TLS (JA3 y JA4), la capa HTTP/2 (frames de SETTINGS, tamaños de ventana y prioridades), HTTP/3, y opciones de TCP. Un cliente solamente TLS arregla solo la primera de estas, mientras que httpcloak aspira a que cada capa sea un detector de múltiples capas que coincide con el mismo navegador.

P: ¿Por qué el hash JA3 cambia entre las ejecuciones pero JA4 no?

JA3 incluye los valores GREASE que los navegadores randomizan en el TLS ClientHello, así que cambia en cada conexión. JA4 ordena y excluye esos valores GREASE, por lo que se mantiene constante para el mismo cliente, y la huella digital de HTTP/2 proviene de frames fijos, por lo que también es estable. Un JA3 cambiante con un JA4 estable es esperado, no un fallo.

P: ¿Puede httpcloak scraping una página renderizada por JavaScript?

No. httpcloak no tiene un motor de JavaScript, así que en una página renderizada por el cliente devuelve el contenedor HTML inicial con un estado 200 y ninguno del contenido renderizado. Usa una herramienta de renderizado como Scrapeless para esas páginas, y mantén httpcloak para puntos finales cuyo contenido ya está en la respuesta.

P: ¿Cómo elijo un navegador para emular?

Pasa el argumento preset con el nombre de un navegador enviado, como chrome-146, firefox-133, o safari-18. El preset establece la huella digital en cada capa a la vez, así que cambiar de un navegador a otro es un solo cambio de argumento en lugar de una configuración por capa.

P: ¿Es suficiente una huella digital de red para evitar bloqueos?
Es suficiente con un chequeo de huellas dactilares y nada más. Los desafíos de JavaScript, el análisis del comportamiento y la reputación de la IP son defensas separadas que httpcloak no aborda, por lo que cuando estos están en juego necesitas renderizado, manejo de desafíos o rotación de proxies además de la huella dactilar.

En Scrapeless, solo accedemos a datos disponibles públicamente y cumplimos estrictamente con las leyes, regulaciones y políticas de privacidad del sitio web aplicables. El contenido de este blog es sólo para fines de demostración y no implica ninguna actividad ilegal o infractora. No ofrecemos garantías y renunciamos a toda responsabilidad por el uso de la información de este blog o enlaces de terceros. Antes de realizar cualquier actividad de scraping, consulte a su asesor legal y revise los términos de servicio del sitio web de destino u obtenga los permisos necesarios.

Artículos más populares

Catalogar