Un token est une autorisation à usage unique : injecté dans un formulaire, il expire en une à deux minutes. Un cookie est un laissez-passer de session : une résolution ouvre l'accès pendant 30 minutes à 24 heures.
Le site cible impose l'un ou l'autre. Ce que vous choisissez, c'est le pipeline bâti autour de cette contrainte : il décide de votre débit et de votre facture.
Quelle approche pour quel scénario
Commencez par lire la page : un champ masqué dans un <form> annonce un token, une page d'attente Cloudflare un cookie.
| Scénario | Approche | Pourquoi |
|---|---|---|
| Connexion protégée par reCAPTCHA | Token | Il part avec les données du formulaire |
| Collecte sur un site derrière Cloudflare | Cookie | Une résolution, des centaines de pages |
| Formulaire protégé par Turnstile | Token | Injecté dans cf-turnstile-response |
| Appels d'API derrière Cloudflare | Cookie | Le même cookie sert tous les appels |
| Envois de formulaires en série | Token à chaque envoi | Jamais deux fois le même |
| Scraping massif sur un domaine | Cookie | Résolvez une fois, collectez jusqu'à expiration |
Un même domaine peut relever des deux à la fois.
Le token : une autorisation à usage unique
Le token est vérifié par Google ou Cloudflare au moment de l'envoi ; rien n'en subsiste ensuite.
Le parcours, étape par étape
- Récupérez le sitekey dans le code source
- Envoyez le sitekey et l'URL à CaptchaAI
- Récupérez le token par polling
- Injectez-le dans le champ masqué
- Envoyez le formulaire
Quels défis renvoient un token
| Type de défi | Champ à renseigner | À savoir |
|---|---|---|
| reCAPTCHA v2 | g-recaptcha-response |
Zone de texte masquée |
| reCAPTCHA v3 | g-recaptcha-response |
Ajoutez action (enterprise=1 si sitekey Enterprise) |
| Turnstile | cf-turnstile-response |
Moins de 10 s |
| hCaptcha | h-captcha-response |
Type non pris en charge par CaptchaAI |
Implémentation en Python
import requests
import time
API_KEY = "YOUR_API_KEY"
# 1. Solve
resp = requests.post("https://ocr.captchaai.com/in.php", data={
"key": API_KEY,
"method": "userrecaptcha",
"googlekey": "6Le-wvkSAAAAAPBMR...",
"pageurl": "https://example.com/login",
"json": "1",
}).json()
task_id = resp["request"]
# 2. Poll
token = None
for _ in range(24):
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"]
break
# 3. Submit form with token (no browser needed)
form_response = requests.post("https://example.com/login", data={
"email": "user@example.com",
"password": "password",
"g-recaptcha-response": token,
})
Ce qu'il faut anticiper
- Aucun navigateur pour l'envoi : une simple requête POST suffit.
- Fenêtre courte : 60 à 120 secondes. Résolvez au moment d'envoyer, pas au démarrage.
- Un token, un envoi : chaque soumission exige une résolution neuve.
Le cookie : un laissez-passer de session
Le cookie est posé par le site après un défi résolu dans un navigateur ; il vit ensuite dans votre client HTTP.
Comment il est délivré
- Le serveur sert une page de challenge (Cloudflare Challenge, JS Challenge)
- Un navigateur résout ce défi, qui peut mobiliser Turnstile en interne
- Le serveur pose un cookie de session, typiquement
cf_clearance - Les requêtes portant ce cookie passent sans nouveau défi
Quels défis délivrent un cookie
| Source du cookie | Cookie posé |
|---|---|
| Cloudflare Challenge | cf_clearance, moins de 15 s |
| JS Challenge | cf_clearance, sans interaction |
| Défis WAF divers | Nom variable selon l'éditeur |
Extraire le cookie, puis passer en requests
from selenium import webdriver
import requests
import time
# 1. Solve the challenge in a browser
driver = webdriver.Chrome()
driver.get("https://example.com/protected")
# Wait for challenge to complete (manually or with CaptchaAI)
time.sleep(10) # Or use CaptchaAI token injection
# 2. Extract cookies from browser
cookies = driver.get_cookies()
cf_clearance = next(
(c for c in cookies if c["name"] == "cf_clearance"), None
)
user_agent = driver.execute_script("return navigator.userAgent")
driver.quit()
# 3. Use cookies for subsequent requests (no browser needed)
session = requests.Session()
session.headers.update({"User-Agent": user_agent})
for cookie in cookies:
session.cookies.set(cookie["name"], cookie["value"])
# All requests now pass the challenge
for page in range(1, 50):
resp = session.get(f"https://example.com/api/data?page={page}")
print(f"Page {page}: {resp.status_code}")
Ce qu'il faut anticiper
- Un navigateur complet pour l'obtenir ; ensuite,
requestssuffit. - Durée de vie longue : 30 minutes à 24 heures selon le site.
- Lié à l'IP et au User-Agent du navigateur : votre session
requestsdoit reprendre les deux.
Cas concret : surveillance tarifaire depuis l'Europe
Une équipe data belge suit les prix publics de six sites concurrents, dont deux derrière Cloudflare Challenge. Ses workers tournent sur OVHcloud et sur AWS eu-west-3 (Paris).
Un conteneur avec navigateur obtient un cf_clearance par domaine et le stocke dans Redis (TTL de 25 minutes) ; quinze workers en requests le réutilisent pour environ 3 000 pages. Un autre des six sites, protégé par Turnstile, exige un token neuf à chaque envoi. Deux règles en découlent : chaque worker sort par l'IP qui a obtenu le cookie, et la minimisation RGPD s'applique dès qu'une page contient des données personnelles.
Combiner les deux sur un même site
Beaucoup de sites empilent les deux couches : une page Cloudflare Challenge (cookie) protège un formulaire à reCAPTCHA (token). L'ordre compte — le cookie d'abord, sinon pas de sitekey.
# Step 1: Get past Cloudflare (cookie)
session = get_cf_clearance_session("https://example.com")
# Step 2: Load the form (using the cookie session)
html = session.get("https://example.com/submit").text
sitekey = extract_sitekey(html)
# Step 3: Solve reCAPTCHA (token)
token = solve_recaptcha(sitekey, "https://example.com/submit")
# Step 4: Submit form (cookie + token)
resp = session.post("https://example.com/submit", data={
"data": "value",
"g-recaptcha-response": token,
})
Si extract_sitekey ne trouve rien, la page lue est encore celle du challenge.
Coût, vitesse et contraintes
Les repères ci-dessous sont les plafonds publiés. Les résultats varient selon l'environnement, le volume et le moment de la journée.
| Critère | Token | Cookie |
|---|---|---|
| Sortie | Chaîne de plus de 500 caractères | Cookie (cf_clearance, etc.) |
| Réutilisable | Non, usage unique | Oui, toute la session |
| Unité de coût | Une résolution par envoi | Une résolution par session |
| Temps de résolution | Turnstile < 10 s, reCAPTCHA v2 < 60 s | Cloudflare Challenge < 15 s |
| Expiration | 60–120 s | 30 min à 24 h |
Côté budget, c'est le nombre de threads qui compte : BASIC ($15/mois, 5 threads) pour des formulaires ponctuels, ADVANCE ($90/mois, 50 threads) pour une collecte parallélisée.
Dépannage
| Problème | Cause probable | Correctif |
|---|---|---|
| Formulaire refusé, token pourtant valide | Deux minutes entre résolution et envoi | Résolvez juste avant le POST |
cf_clearance en 403 après quelques appels |
IP ou User-Agent différents | Épinglez le proxy, recopiez le User-Agent |
| Débit qui s'effondre en collecte | Un navigateur par processus | Mutualisez le cookie en cache |
FAQ
Combien de temps un token reste-t-il valide ?
Entre 60 et 120 secondes selon le type de défi. Au-delà d'une minute d'attente, relancez une résolution plutôt qu'un retry.
Pourquoi mon cookie cf_clearance cesse-t-il de fonctionner après un changement de proxy ?
Parce qu'il est lié à l'IP et au User-Agent qui l'ont obtenu. Épinglez chaque session à un proxy fixe et recopiez le User-Agent du navigateur.
CaptchaAI prend-il en charge hCaptcha pour la partie token ?
Non, ni hCaptcha ni FunCaptcha (Arkose Labs) ; GeeTest v4 est annoncé à venir. Sont pris en charge : reCAPTCHA v2 et v3, Turnstile, Cloudflare Challenge, GeeTest v3, les CAPTCHA image/OCR et les grilles d'images, plus, en bêta, CaptchaFox, Friendly Captcha et Lemin.
Faut-il mettre les cookies obtenus dans un cache partagé ?
Oui, dès que plusieurs workers visent le même domaine : un TTL inférieur à sa durée de vie évite de relancer un navigateur par processus. Ne mettez jamais un token en cache : il expire avant d'être réutilisé.
Résolvez vos CAPTCHA avec CaptchaAI
Récupérez votre clé API sur captchaai.com et envoyez votre première requête.