Tutorials

Résolution de CAPTCHAs depuis un Nim HTTP client

Périmètre sûr : ce guide couvre uniquement vos propres applications, vos environnements de test ou de production, ou des systèmes pour lesquels vous détenez une autorisation écrite. Il ne décrit ni l'automatisation de sites tiers, ni le franchissement de protections anti-bot.

Nim compile vers du C natif et sa bibliothèque std/httpclient suffit à appeler l'API CaptchaAI en quelques lignes. La vraie difficulté n'est pas l'appel HTTP : c'est de rendre la boucle de résolution fiable quand elle tourne sans surveillance, dans un cron ou un worker. Ce guide structure cet appel pour la production.

Le contrat : soumettre, interroger, appliquer

CaptchaAI expose le même contrat en trois temps, identique pour reCAPTCHA v2, reCAPTCHA v3 et Cloudflare Turnstile — seul le type de tâche change :

  1. Soumettez une tâche avec le type de CAPTCHA, la sitekey et l'URL, puis récupérez un identifiant.
  2. Interrogez le résultat jusqu'à ce que le token soit prêt.
  3. Appliquez le token dans la session qui a déclenché le défi.

En Nim, cette boucle repose sur newHttpClient() et postContent.

Préparer l'environnement

Avant d'écrire la moindre ligne, verrouillez trois points :

  • l'environnement de QA est isolé de la production ;
  • la clé CaptchaAI vit dans un secret CI ou un coffre, jamais en dur ;
  • vos endpoints internes acceptent les requêtes de test.

Si vous déployez le worker chez OVHcloud ou Scaleway, choisissez une région proche de vos utilisateurs (par exemple eu-west-3 à Paris) : cette latence réseau, invisible en local, s'ajoute au temps de résolution en production.

Exemple de code

Encapsulez l'appel dans une fonction réutilisable qui prend la sitekey et l'URL de votre page et renvoie un token. L'exemple ci-dessous est en Node.js, mais le contrat est identique en Nim : il crée une tâche Turnstile et renvoie l'identifiant à interroger.

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

Ensuite, interrogez le résultat : attendez quelques secondes avant la première lecture, puis relisez régulièrement jusqu'à un plafond ferme par tâche ; journalisez toute erreur explicite.

Vérifier le token côté backend

Le token doit être vérifié par votre propre backend : aucune requête ne doit être acceptée sur la base d'un token périmé ou contrefait. Le point sensible est le handoff de session — appliquez le token dans le même client HTTP que celui qui a chargé la page. Une session incohérente entre la résolution et l'envoi est la première cause de rejet.

Observabilité et journalisation

Tracez pour chaque appel la durée d'obtention du token, le code retour HTTP et l'identifiant de tâche. Séparez les journaux par environnement et corrélez-les à votre traçage distribué (par exemple OpenTelemetry). S'ils contiennent des données personnelles, minimisez-les et vérifiez vos obligations RGPD.

Liste de contrôle avant la mise en production

  • Le périmètre reste limité à vos propres applications ou à des sources autorisées.
  • La clé CaptchaAI vit dans un secret CI ou un coffre, jamais dans le code source.
  • Durées d'appel et codes retour sont tracés à chaque exécution.
  • Un retry idempotent avec backoff exponentiel borné couvre les erreurs transitoires.
  • Le token est appliqué dans la session HTTP qui a chargé la page.

Dépannage

Problème Cause probable Correctif
Token refusé après résolution Session différente de celle du défi Réutilisez le même client HTTP et le même cookie jar
Interrogation qui expire Première lecture trop précoce ou plafond trop court Temporisez, puis interrogez jusqu'à un plafond ferme
Clé rejetée Espaces parasites ou clé régénérée Recopiez la clé et remplacez le secret CI
Solde insuffisant Compte sous le minimum par tâche Rechargez et ajoutez une alerte de solde bas

FAQ

Nim convient-il à un worker de résolution CAPTCHA qui tourne sans surveillance ?

Oui. Un binaire Nim compilé démarre vite et s'intègre bien dans un conteneur ou un cron. La fiabilité vient de la boucle — délais, retry borné, journalisation — pas du langage.

Comment réutiliser la même session HTTP entre la résolution et l'envoi du formulaire ?

Instanciez un seul newHttpClient() (ou un seul cookie jar) et réutilisez-le du chargement de la page jusqu'à l'envoi. Le token n'est valable que dans le contexte qui a déclenché le défi ; changer de client provoque un rejet.

Quel plan CaptchaAI choisir pour un worker Nim concurrent ?

CaptchaAI facture au thread concurrent, pas à la résolution, avec des résolutions illimitées par thread. Un worker qui ne lance que quelques tâches en parallèle tient sur BASIC ($15/mois, 5 threads) ; pour une dizaine de résolutions simultanées, passez à STANDARD ($30/mois, 15 threads).

Guides connexes

Passez d'un exemple qui fonctionne une fois à un worker fiable et mesurable. – Obtenez votre clé CaptchaAI.

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