Tutorials

Résolution de CAPTCHAs avec Celery et Redis Broker

Périmètre sûr : ce guide s'applique à vos propres applications et à des environnements autorisés (QA, préproduction, production). Il ne décrit pas l'automatisation de sites tiers ni l'évasion d'anti-bot.

Dès qu'un CAPTCHA se glisse dans un worker Celery, l'appel réseau bloquant devient le point fragile de la file. La réponse tient en trois principes : isolez la résolution dans une tâche asynchrone dédiée, bornez son temps d'exécution, et mesurez le taux de réussite. Ce guide câble CaptchaAI à un broker Redis pour que vos tâches restent stables sans surveillance.

Pourquoi isoler la résolution CAPTCHA dans une tâche Celery

Un appel de résolution dure de quelques secondes à une minute selon le défi. Le laisser dans le thread d'une requête web bloque le worker et fait grimper la latence. En le confiant à une tâche Celery, l'attente devient asynchrone : Redis met la tâche en file, un worker la traite, et si l'un tombe, un autre reprend la tâche conservée.

Le déroulé, étape par étape

L'enchaînement reste identique quel que soit le défi ; seule la charge change. Suivez ces cinq étapes dans l'ordre :

  1. Préparez l'environnement. Broker Redis persistant et joignable depuis chaque worker, clé API CaptchaAI dans un secret CI, QA isolée de la production. Un worker sur OVHcloud ou Scaleway en Europe réduit la latence.
  2. Encapsulez l'appel. Une fonction réutilisable reçoit la sitekey et l'URL de votre page, renvoie un token, et trace la durée et le code retour.
  3. Envoyez la tâche au broker. Celery la place dans la file Redis ; un worker disponible la consomme sans bloquer le parcours web.
  4. Interrogez le résultat avec un timeout borné, puis appliquez le token dans la même session que celle qui a déclenché le défi.
  5. Vérifiez côté backend avant toute opération métier, pour rejeter tout token périmé ou forgé.

Exemple : une tâche de résolution Turnstile

L'exemple ci-dessous envoie une tâche Cloudflare Turnstile et récupère son identifiant. Enveloppez-le dans votre tâche Celery, puis interrogez le résultat avant d'appliquer le token :

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;
}

Observabilité et journalisation dans la file Celery

Instrumentez chaque tâche : durée d'obtention du token, code retour HTTP, identifiant de tâche et taille de la file Redis. Ces signaux alimentent vos tableaux de bord et déclenchent une alerte quand la file s'allonge ou que le taux de réussite chute. Côté RGPD, ne journalisez aucune donnée personnelle superflue : un identifiant de tâche et un horodatage suffisent.

Dépannage

La plupart des incidents se ramènent à quatre causes :

Symptôme Cause probable Correctif
Solde insuffisant (ERROR_ZERO_BALANCE) Solde passé sous le minimum par tâche. Rechargez et ajoutez une alerte de solde.
Clé refusée (ERROR_WRONG_USER_KEY) Clé copiée avec un espace ou mauvais compte. Recopiez la clé et stockez-la en secret CI.
Token refusé après résolution Token appliqué dans une autre session que celle du défi. Gardez résolution et soumission dans la même session.
Timeout systématique File Redis saturée ou threads insuffisants. Alignez la concurrence sur votre allocation de threads.

Contrôles avant la mise en production

Passez ces points en revue avant de fusionner l'intégration :

Contrôle Réglage attendu
Périmètre Limité à vos propres applications ou à des sources autorisées.
Clé API Dans un secret CI ou un coffre, jamais dans le code.
Concurrence Alignée sur votre allocation de threads CaptchaAI.
Retry Idempotent, avec backoff exponentiel borné.

FAQ

Faut-il une tâche Celery dédiée à la résolution CAPTCHA ?

Oui, dans la plupart des cas. Une tâche dédiée isole l'appel réseau lent, lui applique son propre timeout et son propre budget de retry, et évite de bloquer les tâches métier plus rapides.

Combien de threads CaptchaAI faut-il pour ma concurrence Celery ?

Autant que de résolutions à exécuter en parallèle. L'offre BASIC ($15/mois, 5 threads) couvre cinq tâches simultanées ; passez à STANDARD ($30/mois, 15 threads) si votre file reste longue en pointe. La facturation se fait au thread simultané, pas au solve.

Comment gérer un timeout de résolution dans un worker ?

Bornez la boucle d'interrogation, par exemple à 120 secondes, puis levez une exception que Celery pourra rejouer. Associez un backoff exponentiel plafonné à 30 secondes et tracez chaque échec terminal avec son identifiant de tâche.

Redis ou RabbitMQ comme broker pour ces tâches ?

Redis suffit largement : il est simple à exploiter et rapide. RabbitMQ s'impose si vous avez besoin d'un routage avancé ou d'une livraison plus fiable ; l'architecture de tâche reste identique.

Guides connexes

Structurez vos workflows CAPTCHA de façon reproductible. – Obtenez votre clé CaptchaAI.

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