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 :
- Soumettez une tâche avec le type de CAPTCHA, la
sitekeyet l'URL, puis récupérez un identifiant. - Interrogez le résultat jusqu'à ce que le token soit prêt.
- 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
- 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 en CI
- Résoudre reCAPTCHA v2 via l'API
Passez d'un exemple qui fonctionne une fois à un worker fiable et mesurable. – Obtenez votre clé CaptchaAI.