Cuando Cloudflare sospecha que un visitante es un bot, muestra un intersticial de página completa con el mensaje "Comprueba tu navegador antes de acceder..." o "Verifica que eres humano". Esto se llama Cloudflare Challenge y no debe confundirse con Turnstile, que es un widget integrado en una página.
El desafío bloquea el acceso a toda la página hasta que el navegador pase la verificación. Una vez aprobada, Cloudflare establece una cookie qa_validation_cookie que otorga acceso a solicitudes posteriores.
Cómo funciona el flujo de desafíos
Request → Cloudflare proxy → Suspicious? → Challenge page
↓
Browser verification
↓
qa_validation_cookie cookie set
↓
Original page loads
- Solicitud interceptada: el proxy inverso de Cloudflare evalúa la solicitud entrante
- Evaluación de riesgos: se analizan la reputación de IP, los encabezados de solicitud, la señales del navegador TLS y el comportamiento.
- Desafío servido: si es sospechoso, una página de desafío reemplaza la respuesta prevista.
- Verificación del navegador: los desafíos de JavaScript se ejecutan en el navegador
- Configuración de cookies: si se realiza correctamente, la cookie
qa_validation_cookiese configura con un TTL configurable. - Acceso concedido: el navegador recarga y recibe el contenido de la página original.
¿Qué desencadena un Cloudflare Challenge?
| gatillo | Descripción |
|---|---|
| IP del centro de datos | Solicitud de proveedores de hosting conocidos |
| encabezados faltantes | Encabezados HTTP faltantes o inusuales |
| señales del navegador TLS | La señales del navegador JA3/JA4 coincide con firmas de bot conocidas |
| Alta tasa de solicitudes | Demasiadas solicitudes de la misma IP |
| Configuración del nivel de seguridad | El propietario del sitio establece un umbral de desafío alto |
| Reglas basadas en países | Reglas de desafío o bloqueo geográfico |
| Puntuación del robot | La puntuación del bot ML de Cloudflare es demasiado baja |
| Amenaza conocida | La IP aparece en las listas de inteligencia sobre amenazas |
La cookie qa_validation_cookie
Después de superar el desafío, el navegador recibe:
qa_validation_cookie=abc123...; path=/; domain=.example.com; secure; HttpOnly; SameSite=None
Propiedades clave:
- Duración: 15 minutos a 24 horas (configurable por el propietario del sitio)
- Alcance: Vinculado al dominio específico
- Vinculante: Vinculado al agente de usuario y la dirección IP utilizada durante la verificación
- Uso: Debe incluirse en todas las solicitudes posteriores para evitar una nueva impugnación.
Importante: La cookie qa_validation_cookie está vinculada al Agente de usuario y a la dirección IP específicos utilizados durante la verificación. Cambiar cualquiera de ellos invalidará la cookie.
Cloudflare Challenge vs Torniquete vs JS Challenge
| Característica | Desafío FQ | torniquete | Desafío JS |
|---|---|---|---|
| Tipo | Intersticial de página completa | Widget en la página | cheque silencioso |
| El usuario ve | Página "Comprobando tu navegador" | Casilla de verificación o nada | nada |
| Bloquea el acceso a la página | si | No | Brevemente |
| Establece qa_validation_cookie | si | A veces | si |
| Requiere proxy para resolver | si | No | N/A |
| El sitio utiliza Cloudflare CDN | Requerido | Opcional | Requerido |
Resolviendo Cloudflare Challenge con CaptchaAI
La resolución de Cloudflare Challenge requiere un proxy porque la cookie qa_validation_cookie está vinculada a la dirección IP.
pitón
import requests
import time
API_KEY = "YOUR_API_KEY"
# Submit task — proxy is REQUIRED
response = requests.get("https://ocr.captchaai.com/in.php", params={
"key": API_KEY,
"method": "cloudflare_challenge",
"pageurl": "https://example.com/protected-page",
"proxy": "username:password@proxy.example.com:8080",
"proxytype": "HTTP",
"json": 1
})
task_id = response.json()["request"]
# Poll for result
for _ in range(60):
time.sleep(5)
result = requests.get("https://ocr.captchaai.com/res.php", params={
"key": API_KEY, "action": "get", "id": task_id, "json": 1
}).json()
if result.get("status") == 1:
solution = result["request"]
# solution contains qa_validation_cookie cookie + user_agent
print(f"qa_validation_cookie: {solution}")
break
Nodo.js
const axios = require('axios');
async function solveCloudflareChallenge(pageurl, proxy) {
const { data } = await axios.get('https://ocr.captchaai.com/in.php', {
params: {
key: 'YOUR_API_KEY',
method: 'cloudflare_challenge',
pageurl,
proxy,
proxytype: 'HTTP',
json: 1
}
});
const taskId = data.request;
for (let i = 0; i < 60; i++) {
await new Promise(r => setTimeout(r, 5000));
const res = await axios.get('https://ocr.captchaai.com/res.php', {
params: { key: 'YOUR_API_KEY', action: 'get', id: taskId, json: 1 }
});
if (res.data.status === 1) return res.data.request;
}
throw new Error('Timeout');
}
Usando la cookie qa_validation_cookie
# After getting the solution
qa_validation_cookie = solution["qa_validation_cookie"]
user_agent = solution["user_agent"]
# Use the SAME proxy and user agent for subsequent requests
session = requests.Session()
session.cookies.set("qa_validation_cookie", qa_validation_cookie, domain=".example.com")
session.headers["User-Agent"] = user_agent
session.proxies = {"https": "http://username:password@proxy.example.com:8080"}
# Now access the protected page
page = session.get("https://example.com/protected-page")
print(f"Status: {page.status_code}")
Por qué se requiere proxy
La cookie qa_validation_cookie está criptográficamente vinculada a:
- Dirección IP — La resolución debe realizarse desde la misma IP que usarás
- Agente de usuario: el agente de usuario de resolución debe coincidir con sus solicitudes
- señales del navegador TLS: algunas configuraciones también verifican las características de TLS
Si alguno de estos difiere entre la solución y sus solicitudes posteriores, la cookie no es válida.
Preguntas frecuentes
¿Cuánto dura qa_validation_cookie?
Los propietarios del sitio configuran la duración, normalmente de 15 minutos a 24 horas. Después del vencimiento, se debe resolver un nuevo desafío.
¿Puedo reutilizar qa_validation_cookie en diferentes IP?
No. La cookie está vinculada a la IP utilizada durante la verificación. Cambiar las IP requiere una nueva solución.
¿Cuál es la diferencia entre Cloudflare Challenge y Turnstile?
Cloudflare Challenge es un intersticial de página completa que bloquea el acceso a la página. Turnstile es un widget integrado en la página, similar a reCAPTCHA. El desafío requiere que el sitio utilice Cloudflare como proxy; El torniquete se puede utilizar en cualquier sitio.
¿Cuánto tiempo lleva resolverlo?
La resolución de Cloudflare Challenge tarda entre 20 y 60 segundos, más que Turnstile o reCAPTCHA debido a la verificación completa del navegador.
¿Qué pasa si la página tiene Cloudflare y reCAPTCHA?
Resuelva primero el Cloudflare Challenge para acceder a la página, luego resuelva el reCAPTCHA en la página cargada.
Guías relacionadas
- Cómo resolver Cloudflare Challenge usando API
- Errores y correcciones de Cloudflare Challenge
- Cómo funciona Cloudflare Turnstile
- Cómo resolver Cloudflare Turnstile usando API