Explainers

En-têtes, cookies et empreinte TLS : leur effet sur la résolution des CAPTCHA

Périmètre sûr : ce guide s'applique à vos propres applications, à vos environnements de QA ou de production, ou à des systèmes que vous êtes autorisé à tester. Il ne décrit ni l'automatisation de sites tiers, ni le contournement de protections.

Un token CAPTCHA valide peut être refusé si la session qui l'utilise ne ressemble pas à celle qui a déclenché le défi. En-têtes HTTP, cookies et empreinte TLS forment la signature de votre session : quand elle change entre la résolution et la soumission, le backend voit deux clients différents et rejette la requête. Maîtriser ces trois leviers rend l'intégration stable et mesurable.

Ce que révèlent vos en-têtes, cookies et empreinte TLS

Chaque appel expose une signature composite. Les en-têtes (User-Agent, Accept-Language, ordre des champs) annoncent quel client parle ; les cookies portent l'état de session, dont les jetons posés à l'affichage du CAPTCHA ; l'empreinte TLS identifie la bibliothèque réseau, indépendamment de vos en-têtes. L'enjeu est la cohérence : si un navigateur headless déclenche le défi mais qu'un client HTTP distinct soumet le token, les trois signatures divergent et l'acceptation chute. D'où la règle : résolvez et soumettez dans la même session.

Le modèle à trois acteurs

Trois acteurs suffisent à raisonner : le front affiche le widget et collecte le contexte, le fournisseur CAPTCHA émet le défi puis renvoie un token à durée de vie limitée, et le backend revérifie ce token côté serveur. CaptchaAI intervient à la production du token via une API unique, quelle que soit la famille de CAPTCHA.

Workflow de résolution CAPTCHA, étape par étape

  1. Capturez les paramètres attendus : ce que la famille de CAPTCHA réclame (sitekey, URL de page, action, proxy optionnel).
  2. Envoyez la tâche à l'endpoint in.php avec json=1. Tout statut différent de 1 est une erreur à journaliser.
  3. Interrogez le résultat sur res.php : attendez 15 s, puis toutes les 5 s, avec un plafond de 120 s par tâche.
  4. Appliquez le token dans la même session qui a déclenché le défi : même navigateur, même client HTTP, même stockage de cookies.
  5. Suivez la latence, les retries et l'acceptation en aval. L'écart entre réussite du solveur et acceptation finale signale un problème d'empreinte.

Exemple : vérifier le solde avant un lot de tests

Avant une suite de préproduction planifiée (par exemple sur Scaleway), vérifiez le solde pour éviter qu'un ERROR_ZERO_BALANCE n'interrompe l'exécution :

import os
import requests

API_KEY = os.environ['CAPTCHAAI_KEY']

def get_balance() -> float:
    resp = requests.post(
        'https://api.captchaai.com/getBalance',
        json={'clientKey': API_KEY},
        timeout=15,
    )
    resp.raise_for_status()
    return float(resp.json().get('balance', 0))

La facturation CaptchaAI se fait au thread (résolutions illimitées) : dès l'offre BASIC ($15/mois, 5 threads), le coût dépend de votre concurrence, pas du volume.

Observabilité et dépannage

Instrumentez les appels CAPTCHA : durée d'obtention du token, code retour HTTP et identifiant de tâche. Séparez les journaux par environnement et corrélez les identifiants à votre traçage distribué (par exemple OpenTelemetry).

Symptôme Cause probable Correctif
ERROR_WRONG_USER_KEY Clé copiée avec des espaces ou mauvais compte. Recopiez la clé et stockez-la en secret CI.
ERROR_ZERO_BALANCE Solde inférieur au minimum par tâche. Rechargez et ajoutez une alerte de solde.
ERROR_PAGEURL / ERROR_BAD_PARAMETERS Paramètre manquant ou mal formé. Revalidez l'URL, le sitekey et les champs contre le HTML.
Token refusé après résolution Token appliqué dans une autre session. Gardez résolution et soumission dans le même contexte.

Liste de contrôle avant mise en production

  • Le périmètre reste limité à vos applications ou à des sources autorisées.
  • La clé CaptchaAI est stockée en secret CI ou en coffre, jamais dans le code.
  • La résolution et la soumission partagent le même contexte de session.
  • Un retry idempotent (trois tentatives, backoff exponentiel) est en place.

FAQ

Pourquoi un token CAPTCHA valide est-il parfois refusé ?

Le plus souvent parce que la session a changé entre résolution et soumission : si en-têtes, cookies ou empreinte TLS diffèrent, le backend voit un autre client et rejette le token. Rejouez-le dans la session d'origine.

Comment conserver la même session entre résolution et soumission ?

Réutilisez le même contexte de navigateur ou le même client HTTP, avec le même stockage de cookies. Ne résolvez pas dans un navigateur headless pour soumettre depuis un client distinct : c'est ce qui casse le plus souvent l'acceptation.

CaptchaAI prend-il en charge hCaptcha ?

Non — pas encore pris en charge. CaptchaAI résout reCAPTCHA v2 et v3, Cloudflare Turnstile et Challenge, GeeTest v3, l'image/OCR, les grilles et BLS, plus CaptchaFox (bêta), Friendly Captcha (bêta) et Lemin (bêta).

Guides connexes

Fiabilisez vos workflows CAPTCHA de façon méthodique et reproductible. – Obtenez votre clé CaptchaAI.

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