Périmètre sûr : ce guide s'applique à vos propres applications, à vos environnements de QA ou de production, ou à des systèmes pour lesquels vous disposez d'une autorisation écrite. Il ne couvre ni l'automatisation de sites tiers ni les techniques d'anti-détection.
Le token Turnstile n'atterrit pas dans le champ cf-turnstile-response de votre formulaire ? Le coupable est presque toujours l'un de trois points : une session incohérente entre la résolution et la soumission, un paramètre d'entrée erroné, ou une clé API mal chargée au runtime. Ce guide isole la cause, puis fiabilise l'injection en production.
Pourquoi le token Turnstile n'est pas injecté
Quand le token n'apparaît pas côté page, remontez la chaîne dans cet ordre :
- La session de remise. Le token doit être appliqué dans le même contexte de navigateur et le même cookie jar que le défi. Une session différente est la cause numéro un des rejets.
- Les paramètres du solveur. Un
sitekeyou unewebsiteURLerronés créent de fausses pistes. Comparez-les au HTML réel de la page. - La clé API au runtime. Une clé absente ou tronquée renvoie une tâche sans token ; vérifiez qu'elle est montée en variable d'environnement.
La boucle de résolution : createTask puis interrogation du résultat
La séquence reste identique dans tous les langages :
- Capturez le strict nécessaire : le
sitekeyTurnstile, l'URL de la page, et un proxy en option. - Envoyez la tâche à
createTaskavec le typeTurnstileTaskProxylesset récupérez l'identifiant. - Interrogez le résultat toutes les 5 secondes, avec un plafond ferme par tâche.
- Injectez le token dans la même session que le défi, dans le champ
cf-turnstile-response. - Mesurez la latence et l'acceptation en aval, au-delà de la seule réussite du solveur.
Liste de contrôle avant la mise en production
- Le périmètre est limité à vos propres applications ou à des sources autorisées.
- La clé CaptchaAI est stockée en secret CI ou en coffre, jamais en clair.
- Une stratégie de retry idempotent, plafonnée à trois tentatives, gère les erreurs transitoires.
- Les tests restent rejouables en CI.
Exemple de code
Exemple côté client, tiré de votre suite de tests :
import fetch from 'node-fetch';
const API_KEY = process.env.CAPTCHAAI_KEY;
export async function createTurnstileTask(siteKey, pageUrl) {
const res = await fetch('https://api.captchaai.com/createTask', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
clientKey: API_KEY,
task: {
type: 'TurnstileTaskProxyless',
websiteURL: pageUrl,
websiteKey: siteKey,
},
}),
});
const data = await res.json();
return data.taskId;
}
Tableau de dépannage
| Problème | Cause probable | Correctif |
|---|---|---|
Champ cf-turnstile-response vide |
Token appliqué dans une autre session que le défi. | Gardez résolution et soumission dans le même contexte de navigateur. |
ERROR_WRONG_USER_KEY |
Clé copiée avec un espace parasite ou mauvais compte. | Recopiez la clé depuis le tableau de bord, en secret CI. |
ERROR_ZERO_BALANCE |
Solde du compte sous le minimum par tâche. | Rechargez le solde et ajoutez une alerte de seuil. |
ERROR_PAGEURL / ERROR_BAD_PARAMETERS |
Entrée manquante ou mal formée. | Revalidez l'URL et le sitekey Turnstile face au HTML réel. |
| Token obtenu mais rejeté | Délai d'expiration dépassé avant la soumission. | Réduisez le temps entre la résolution et l'envoi du formulaire. |
Stocker la clé API CaptchaAI en toute sécurité
La clé CaptchaAI vit dans un coffre (HashiCorp Vault, AWS Secrets Manager) ou un secret CI, jamais dans le code source. Côté RGPD, limitez la journalisation aux identifiants techniques, sans donnée personnelle.
Observabilité : mesurer l'acceptation du token
Instrumentez chaque appel : durée d'obtention du token, code retour HTTP et identifiant de tâche. Suivez surtout deux cibles — le taux de réussite du solveur et le taux d'acceptation en aval, la part de tokens acceptés dans la même session. L'écart entre les deux trahit un problème de session.
FAQ
Pourquoi le token Turnstile est-il rejeté après résolution ?
Presque toujours parce qu'il est appliqué dans une session différente de celle du défi. Conservez le même contexte de navigateur et le même cookie jar, et vérifiez que le token n'a pas expiré entre-temps.
Que faire si l'extension n'injecte toujours pas le token ?
Vérifiez que le widget Turnstile est chargé, que le champ cf-turnstile-response existe dans le DOM et que l'extension a les permissions sur le domaine.
Faut-il un proxy pour résoudre Cloudflare Turnstile ?
Non, pas systématiquement. Le type TurnstileTaskProxyless fonctionne sans proxy pour la plupart des intégrations. Ajoutez-en un seulement si la page conditionne le défi à une géolocalisation ou une IP précise.
Combien coûte la résolution de Turnstile à grande échelle ?
La facturation repose sur les threads, pas sur le nombre de résolutions : un thread traite un CAPTCHA à la fois, avec des résolutions illimitées dans le mois. L'offre BASIC ($15/mois, 5 threads) suffit pour démarrer.
Guides connexes
- Le démarrage rapide CaptchaAI
- La QA CAPTCHA en environnements autorisés
- Tester l'endpoint API sur vos formulaires
- Intégrer la résolution CAPTCHA à votre CI
- Résoudre reCAPTCHA v2 via l'API
Fiabilisez vos workflows CAPTCHA de façon méthodique et reproductible. – Obtenez votre clé CaptchaAI.