Imperva Incapsula: Por Qué tu Scraper Recibe 'Request Unsuccessful' y Cómo Solucionarlo
Tu script pide una página de producto y recibe unos pocos cientos de bytes de HTML. Ni producto, ni precio. Solo una línea: “Request unsuccessful. Incapsula incident ID: …” seguida de un número largo. A veces llega con un 403. A veces, peor aún, con un 200. Abres la misma URL en tu navegador y carga al instante.
Te has topado con Imperva. Es un sistema de protección contra bots habitual en webs de retail, viajes, inmobiliarias, finanzas y administración pública, y se comporta de forma distinta a Cloudflare o DataDome en varios puntos que importan cuando haces scraping. Esta guía te enseña a reconocerlo, a entender cómo decide que eres un bot y a obtener la página real con herramientas de código abierto.
Qué Es Realmente Imperva (Incapsula)
Incapsula era el nombre original del servicio de seguridad en la nube de Imperva: una CDN y un firewall de aplicaciones web (WAF) que se coloca delante de un sitio. La marca está prácticamente retirada, pero el nombre sigue vivo en las cookies y en las páginas de bloqueo, y por eso los desarrolladores lo siguen llamando “Incapsula”. En 2019 Imperva compró Distil Networks, una de las primeras empresas de mitigación de bots, y esa tecnología se convirtió en Imperva Advanced Bot Protection. Hoy Imperva forma parte de Thales.
Lo práctico para ti es que un sitio protegido puede tener dos capas:
- La capa de borde (WAF y CDN). Cada petición pasa por la red de Imperva. Revisa la reputación de la IP, las firmas de la petición y la huella de tu conexión, coloca cookies de seguimiento y puede servir un desafío de JavaScript o un CAPTCHA.
- Advanced Bot Protection. Una capa adicional por encima. Un script sensor se ejecuta en el navegador, recoge una huella del dispositivo y el resultado se convierte en un token firmado que las peticiones siguientes deben llevar. El comportamiento y el ritmo de peticiones se puntúan por dispositivo, no solo por IP.
Algunos sitios solo usan la capa de borde. Esos a menudo se resuelven con un buen cliente HTTP. Los sitios con Advanced Bot Protection casi siempre necesitan un navegador real en algún momento.
Cómo Saber Si Te Enfrentas a Imperva
Antes de cambiar nada, confirma con qué estás tratando. Imperva deja rastros claros:
- Cabeceras de respuesta. La cabecera
X-Iinfoaparece en el tráfico de Imperva, incluso en las respuestas correctas. Muchos sitios también envíanX-CDN: ImpervaoX-CDN: Incapsula. - Cookies.
visid_incap_<id del sitio>(un ID de visitante de larga duración),incap_ses_<n>_<id del sitio>(la sesión) ynlbi_<id del sitio>(balanceo de carga). El sufijo con el ID del sitio ata cada cookie a un único sitio protegido. - Cookies de desafío.
___utmvcpertenece al desafío de JavaScript antiguo.reese84pertenece a Advanced Bot Protection. Las dos se crean con JavaScript, así que las verás en el almacén de cookies del navegador, no en la primera respuesta HTTP. - Marcas en el cuerpo. “Request unsuccessful” junto a un “Incapsula incident ID”, un script cargado desde
/_Incapsula_Resourceo una página “Pardon Our Interruption”, que viene de la herencia de Distil.
Una pequeña función hace que la comprobación sea repetible:
from curl_cffi import requests
COOKIE_PREFIXES = ("visid_incap_", "incap_ses_", "nlbi_", "reese84", "___utmvc")
def imperva_signals(resp):
found = []
if "x-iinfo" in resp.headers:
found.append("X-Iinfo header")
cdn = resp.headers.get("x-cdn", "")
if "imperva" in cdn.lower() or "incapsula" in cdn.lower():
found.append(f"X-CDN: {cdn}")
found += [f"cookie {n}" for n in resp.cookies.keys() if n.startswith(COOKIE_PREFIXES)]
return found
def is_imperva_block(html):
if "Incapsula incident ID" in html or "Pardon Our Interruption" in html:
return True
# Las páginas reales también pueden incluir el script, así que solo cuenta una página diminuta
return "_Incapsula_Resource" in html and len(html) < 5_000
resp = requests.get("https://www.example.com/", impersonate="chrome")
print(resp.status_code, imperva_signals(resp), is_imperva_block(resp.text))
Fíjate en que is_imperva_block mira el cuerpo, no el código de estado. Es a propósito. Imperva puede devolver su página de bloqueo con un 200, y un scraper que solo busca errores guardará páginas vacías sin quejarse. Explicamos este fallo en cómo detectar bloqueos suaves.
Cómo Decide Imperva Que Eres un Bot
Piensa en ello como una serie de puertas. Basta con fallar una para quedar bloqueado.
1. La Conexión
Antes de un solo byte de HTML, el borde ve tu IP y tu handshake TLS. Los rangos de IP de centros de datos y las IP con historial de abuso empiezan con una puntuación baja. El handshake de requests en Python no se parece en nada al de Chrome, y por eso muchas veces falla ya la primera petición. Los detalles están en nuestra guía sobre huellas TLS.
2. La Cadena de Cookies
En tu primera visita, Imperva coloca las cookies de visitante y de sesión. Se espera que las peticiones siguientes las devuelvan de forma coherente. Las cookies están ligadas entre sí y al sitio: una cookie de sesión pertenece a un ID de visitante, y una cookie de un sitio con Imperva no significa nada en otro. Un cliente que pierde cookies, envía un conjunto caducado o mezcla cookies de sesiones distintas vuelve a recibir un desafío.
3. El Desafío de JavaScript
Si el borde no está convencido, retiene el contenido y sirve una página que carga un script. La versión antigua, servida desde /_Incapsula_Resource, recoge propiedades del navegador y guarda un resultado cifrado en la cookie ___utmvc. El sensor más reciente de Advanced Bot Protection recoge una huella mucho más amplia, la envía a una ruta propia de cada sitio y recibe un token reese84 con caducidad incorporada. Ese token hay que renovarlo mientras navegas. Un cliente HTTP simple nunca ejecuta ninguno de los dos scripts, así que nunca pasa esta puerta.
4. El Comportamiento a lo Largo del Tiempo
Pasar una vez no es el final. Advanced Bot Protection sigue puntuando la sesión: lo rápido que pides páginas, si solo visitas URL profundas, si la misma huella de dispositivo aparece desde muchas IP. Imperva describe límites de ritmo basados en la huella del dispositivo y no en la IP, así que rotar IP por sí solo no los reinicia.
Las políticas también se definen por ruta. Es habitual que la página de inicio cargue bien mientras los resultados de búsqueda, las API internas o las páginas de cuenta están bloqueadas. Si tu URL de prueba funciona y tu objetivo real no, normalmente es por esto.
Por Qué Falla Tu Scraper
Así se corresponden las puertas con los síntomas que ves:
- La primera petición se bloquea siempre: la puerta de la conexión. El problema es tu huella TLS o tu IP.
- Página diminuta con un script y sin contenido: el desafío de JavaScript. Tu cliente no ejecuta JavaScript.
- Funciona unos minutos y luego se bloquea: el token caducó y no se renovó, o tu ritmo de peticiones activó el control de comportamiento.
- La página de inicio funciona, la búsqueda está bloqueada: una política más estricta en esa ruta.
- Bloqueado en Playwright, sin problemas en tu propio Chrome: se está puntuando el propio navegador de automatización. Mira por qué tu navegador de Playwright recibe desafíos.
Cómo Pasar con Herramientas de Código Abierto
Empieza por la opción más barata y detente en la primera que funcione.
Paso 1: Usa un Cliente HTTP con Huella de Navegador
Si el sitio solo usa la capa de borde, un cliente que envía una huella TLS y HTTP/2 de navegador real suele bastar. curl_cffi con impersonate="chrome" es la opción habitual en Python. Usa una sesión para que las cookies de Imperva de la primera respuesta se devuelvan en las siguientes, y visita la página de inicio antes de la URL profunda:
from curl_cffi import requests
s = requests.Session(impersonate="chrome")
s.get("https://www.example.com/") # recoge las cookies visid_incap_ e incap_ses_
resp = s.get(
"https://www.example.com/c/toys",
headers={"Referer": "https://www.example.com/"},
)
print(resp.status_code, is_imperva_block(resp.text))
Si sigues recibiendo una página de desafío, el sitio hace una comprobación de JavaScript y ningún cliente HTTP la superará por sí solo.
Paso 2: Deja Que un Navegador Real Pase el Desafío
Para los desafíos de JavaScript y reese84, ejecuta Chrome real. Con Playwright, usa el Chrome que tienes instalado (channel="chrome"), en modo con interfaz, y mantén un perfil persistente para que la cookie de visitante sobreviva entre ejecuciones. Un visitante que vuelve y tiene algo de historial parece más normal que un perfil nuevo en cada ejecución.
from playwright.sync_api import sync_playwright
URLS = [
"https://www.example.com/c/toys?page=1",
"https://www.example.com/c/toys?page=2",
]
with sync_playwright() as p:
ctx = p.chromium.launch_persistent_context(
"./imperva-profile", channel="chrome", headless=False, no_viewport=True
)
page = ctx.new_page()
# Entra como un visitante y da tiempo a que termine el script sensor
page.goto("https://www.example.com/", wait_until="networkidle")
page.wait_for_timeout(3000)
for url in URLS:
page.goto(url, wait_until="domcontentloaded")
html = page.content()
if is_imperva_block(html):
print("Blocked on", url)
break
# analiza el html aquí
page.wait_for_timeout(2000) # ritmo humano
ctx.close()
Como la página sigue ejecutando el script de Imperva, el navegador renueva el token por sí mismo. Esa es la gran ventaja frente a coger las cookies una vez y reutilizarlas. Si quieres pasar las cookies a un cliente HTTP más rápido, mantén la misma IP y el mismo user agent, y cuenta con renovarlas a menudo. Nuestra guía de persistencia de sesión explica ese patrón.
Si un perfil empieza a quedar bloqueado en todas las páginas, borra la carpeta del perfil y empieza de cero. Un ID de visitante quemado te sigue a todas partes.
Paso 3: Arregla la Parte de la IP
Si un navegador real sigue bloqueado en la primera página, revisa tu IP. Usa IP residenciales o móviles de un proveedor serio, y usa sesiones fijas: una sola IP durante toda la vida de una sesión de navegador. Cambiar de IP a mitad de sesión mientras envías las mismas cookies es una señal de bot muy clara. Playwright recibe el proxy al arrancar:
ctx = p.chromium.launch_persistent_context(
"./imperva-profile",
channel="chrome",
headless=False,
proxy={"server": "http://proxy.example.net:8000", "username": "user", "password": "pass"},
)
Paso 4: Baja el Ritmo y Reparte la Carga
Advanced Bot Protection vigila toda la sesión, así que el ritmo importa. Añade esperas aleatorias, limita el número de páginas por sesión y ejecuta varias sesiones separadas en lugar de una sola que machaque el sitio. Cada sesión lleva su propio perfil, su propia IP y su propio almacén de cookies. Nunca compartas cookies entre sesiones.
Mantén un ritmo de peticiones razonable y respeta las condiciones del sitio. Ser educado también es la forma más barata de no ser bloqueado.
Preguntas Frecuentes
¿Imperva es lo mismo que Incapsula?
Para el scraping, sí. Incapsula era el nombre original del servicio de WAF y CDN en la nube de Imperva. El nombre sigue apareciendo en las cookies (visid_incap_, incap_ses_) y en el mensaje de bloqueo “Incapsula incident ID”.
¿Qué es la cookie reese84?
Contiene un token de Imperva Advanced Bot Protection. Un script de la página recoge señales del navegador y del dispositivo, las envía al sitio y recibe un token firmado con caducidad. Las peticiones sin un token válido y reciente reciben un desafío.
¿Puedo reutilizar las cookies de Imperva en otro sitio?
No. Cada cookie lleva el ID del sitio protegido, y la cookie de sesión está ligada a la cookie de visitante. Las cookies de un sitio no sirven en otro, y las cookies caducadas en el mismo sitio provocan un nuevo desafío.
¿Por qué funciona la página de inicio pero se bloquean los resultados de búsqueda?
Las políticas de Imperva se configuran por ruta. Los propietarios de los sitios suelen proteger la búsqueda, los precios y los endpoints de API con más rigor que las páginas estáticas. Prueba siempre tu scraper con las URL que de verdad necesitas.
Si Prefieres No Mantener Todo Esto
Todo lo anterior funciona, pero es trabajo continuo: las versiones del navegador cambian, los tokens caducan, las IP se queman y cada sitio protegido está ajustado de forma un poco distinta. Si prefieres dedicar ese tiempo a los datos, ScrapeUnblocker recibe una URL y devuelve la página renderizada con una sola llamada a la API, también en sitios protegidos por Imperva. Nuestro benchmark público incluye un objetivo protegido por Incapsula, y la documentación te muestra cómo hacer tu primera petición en pocos minutos.
Prueba ScrapeUnblocker gratis
Tasa de éxito del 95%+ · desde 0,55 € por cada 1000 llamadas (puede aplicarse IVA) · 500 solicitudes gratis al registrarte.