Explications Techniques

Cloudflare Challenge cf_clearance Guide des cookies

Lorsque Cloudflare signale un visiteur comme suspect, il affiche une page de défi interstitielle. Une fois résolu, le navigateur reçoit un cookie cf_clearance qui accorde l'accès à la session. Ce guide explique comment fonctionne le flux de défi et comment CaptchaAI le gère.


Comment fonctionnent les pages Cloudflare Challenge

  1. L'utilisateur demande une page protégée par Cloudflare
  2. Cloudflare évalue les signaux de risque (réputation IP, en-têtes, empreinte digitale TLS)
  3. S'il est signalé, Cloudflare renvoie un 403 ou 503 avec une page de défi JavaScript
  4. La page de défi exécute des vérifications du navigateur et peut présenter un widget Turnstile
  5. En cas de succès, Cloudflare définit cf_clearance et redirige vers l'URL d'origine
  6. Les requêtes ultérieures avec le cookie sont transmises sans contestation

Propriété Détails
Nom cf_clearance
Domaine Domaine du site cible (par exemple, .example.com)
Chemin /
Durée de vie Généralement 30 minutes à 24 heures
Http uniquement Oui
Sécurisé Oui (HTTPS uniquement)
Même site Aucun

Le cookie est lié à plusieurs facteurs :

  • Adresse IP — L'utilisation du cookie à partir d'une adresse IP différente échoue généralement
  • User-Agent — Doit correspondre à l'UA utilisé lors de la résolution du défi
  • Empreinte digitale TLS — Certaines configurations se lient au client TLSHello

Types de défis

Cloudflare répond à différents niveaux de défi :

Défi Code de réponse Interaction de l'utilisateur Descriptif
Défi JS 503 Aucun Exécution JavaScript uniquement
Défi géré 403 Peut-être Cloudflare décide : il peut afficher Turnstile ou passer silencieusement
Défi interactif 403 Oui Affiche toujours un widget Tourniquet

CaptchaAI résout les trois types via le solveur Cloudflare Challenge.


Résolution avec CaptchaAI

Python

import requests
import time

API_KEY = "YOUR_API_KEY"
TARGET_URL = "https://example.com/protected-page"

# Submit Cloudflare Challenge task
resp = requests.post("https://ocr.captchaai.com/in.php", data={
    "key": API_KEY,
    "method": "turnstile",
    "sitekey": "0x0000000000000000000000",  # may be generic for CF challenge
    "pageurl": TARGET_URL,
    "json": "1",
}).json()

if resp["status"] != 1:
    raise Exception(f"Submit error: {resp['request']}")

task_id = resp["request"]
print(f"Task ID: {task_id}")

# Poll for result
for _ in range(30):
    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["status"] == 1:
        token = result["request"]
        print(f"Token received: {token[:50]}...")
        break
    if result["request"] != "CAPCHA_NOT_READY":
        raise Exception(f"Error: {result['request']}")

Javascript

const axios = require('axios');

const API_KEY = 'YOUR_API_KEY';
const TARGET_URL = 'https://example.com/protected-page';

const submit = await axios.post('https://ocr.captchaai.com/in.php', null, {
  params: {
    key: API_KEY,
    method: 'turnstile',
    sitekey: '0x0000000000000000000000',
    pageurl: TARGET_URL,
    json: 1,
  }
});
const taskId = submit.data.request;

// Poll
let token = null;
for (let i = 0; i < 30; i++) {
  await new Promise(r => setTimeout(r, 5000));
  const poll = await axios.get('https://ocr.captchaai.com/res.php', {
    params: { key: API_KEY, action: 'get', id: taskId, json: 1 }
  });
  if (poll.data.status === 1) {
    token = poll.data.request;
    break;
  }
}
console.log(`Token: ${token.substring(0, 50)}...`);

Utiliser le jeton résolu

Après résolution, injectez le jeton dans la page du défi pour obtenir cf_clearance :

# With Selenium
from selenium import webdriver

driver = webdriver.Chrome()
driver.get(TARGET_URL)  # Load the challenge page

# Inject token into Turnstile response field
driver.execute_script("""
    const input = document.querySelector('input[name="cf-turnstile-response"]');
    if (input) input.value = arguments[0];

    // Trigger form submit or callback
    const form = document.querySelector('form');
    if (form) form.submit();
""", token)

# Wait for redirect and extract cookies
import time
time.sleep(3)
cookies = driver.get_cookies()
cf_clearance = next(
    (c for c in cookies if c['name'] == 'cf_clearance'), None
)
if cf_clearance:
    print(f"cf_clearance: {cf_clearance['value'][:30]}...")
session = requests.Session()
session.cookies.set("cf_clearance", cf_clearance["value"], domain=".example.com")
session.headers.update({
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
})

# Now access protected pages
resp = session.get("https://example.com/api/data")
print(resp.status_code)  # 200

Durée de vie et actualisation des cookies

Le cookie cf_clearance expire. Plan de résolution :

import datetime

def is_cookie_valid(cookie):
    if not cookie:
        return False
    expiry = cookie.get("expiry", 0)
    return datetime.datetime.now().timestamp() < expiry - 60  # 60s buffer

def get_or_refresh_clearance(driver, target_url, solve_func):
    cookies = driver.get_cookies()
    cf = next((c for c in cookies if c["name"] == "cf_clearance"), None)
    if is_cookie_valid(cf):
        return cf["value"]

    # Re-solve
    token = solve_func(target_url)
    # ... inject and extract new cookie

Dépannage

Problème Parce que Corriger
Cookie rejeté après résolution Incompatibilité IP Utilisez le même proxy pour la résolution et les requêtes
Le cookie expire rapidement TTL court défini par site Résoudre avant l'expiration ; vérifiez le champ expiry
403 malgré un cookie valide Inadéquation utilisateur-agent Faire correspondre l'UA entre les sessions de résolution et de requête
La page du défi ne se charge pas JavaScript désactivé Utilisez un navigateur complet (Selenium, Puppeteer)

FAQ

Puis-je partager cf_clearance entre différentes machines ?

Seulement s'ils partagent la même adresse IP et que vous correspondez à la chaîne User-Agent. Cloudflare associe souvent le cookie à l'adresse IP d'origine.

Combien de temps dure cf_clearance ?

Généralement 30 minutes à 24 heures, selon la configuration Cloudflare du propriétaire du site.


Résolvez les pages Cloudflare Challenge avec CaptchaAI

Obtenez votre clé API surcaptchaai.com.


Guides associés

Les commentaires sont désactivés pour cet article.