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
- L'utilisateur demande une page protégée par Cloudflare
- Cloudflare évalue les signaux de risque (réputation IP, en-têtes, empreinte digitale TLS)
- S'il est signalé, Cloudflare renvoie un 403 ou 503 avec une page de défi JavaScript
- La page de défi exécute des vérifications du navigateur et peut présenter un widget Turnstile
- En cas de succès, Cloudflare définit
cf_clearanceet redirige vers l'URL d'origine - Les requêtes ultérieures avec le cookie sont transmises sans contestation
Le cookie cf_clearance
| 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]}...")
Réutiliser le cookie
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
- Extraction de clé de site Cloudflare Turnstile
- Tourniquet contre hCaptcha contre reCAPTCHA
- Cookies pour de meilleurs taux de résolution