Périmètre sûr : Ce guide s'applique exclusivement à vos propres applications, environnements de QA, de préproduction ou de production, ou à des systèmes pour lesquels vous disposez d'une autorisation écrite. Il ne décrit ni l'automatisation de sites tiers, ni le contournement de protections, ni l'évasion d'anti-bot.
Un client HTTP en OCaml n'a pas besoin d'un SDK dédié pour résoudre un CAPTCHA : l'API CaptchaAI s'appelle en HTTP, comme n'importe quel service REST que vous consommez déjà. Le vrai enjeu n'est pas le premier appel réussi dans utop, mais un flux qui tient dans la durée — en CI, dans un worker planifié ou derrière une file d'attente interne.
Le flux en cinq étapes
- Capturez les paramètres exacts. Inspectez la page ou l'appel réseau et ne relevez que ce que la famille de CAPTCHA attend : sitekey, URL de la page, action, proxy éventuel.
- Soumettez la tâche à
in.phpavecjson=1, et traitez tout statut différent de1comme une erreur à tracer. - Interrogez le résultat sur
res.php: attendez 15 secondes, puis interrogez toutes les 5 secondes avec un plafond ferme par tâche. - Appliquez le token dans la même session que celle qui a déclenché le défi — même client HTTP, même cookie jar.
- Mesurez la latence et le taux de réussite à chaque exécution, séparément de la réussite du workflow.
Préparer un environnement isolé
- Isolez votre environnement de QA de la production avant tout test.
- Stockez la clé CaptchaAI dans un secret d'intégration continue ou un coffre, jamais en dur dans un fichier
.ml. - Vérifiez que vos endpoints internes acceptent le trafic de test.
- Déployez le worker OCaml dans une région proche (OVHcloud ou Scaleway, eu-west-3 Paris) pour que la latence ne se confonde pas avec le temps de résolution.
Encapsuler l'appel à l'API CaptchaAI
Isolez l'appel dans une fonction réutilisable — un simple val solve : sitekey:string -> page_url:string -> string par-dessus votre bibliothèque HTTP (Cohttp, ocurl ou Piaf). Elle soumet la tâche, interroge le résultat, renvoie le token et trace la durée et le code retour. La même boucle, ici en Node.js, se porte vers votre client OCaml :
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;
}
Valider le token côté backend
Le token renvoyé doit être vérifié par votre backend avant toute opération métier, dans la même session que celle qui a déclenché le défi. Un token appliqué dans un autre contexte est la cause de rejet la plus fréquente après résolution.
Instrumenter et journaliser les appels
- Tracez pour chaque appel la durée d'obtention du token, le code retour HTTP, l'identifiant de tâche et la taille de la file d'attente.
- Séparez les journaux par environnement : développement, préproduction, production.
- Corrélez-les à votre traçage distribué (OpenTelemetry) pour rejouer un scénario complet à partir d'un identifiant unique.
- Côté RGPD, ne journalisez que des identifiants techniques et des codes retour, jamais les données personnelles saisies dans le formulaire protégé.
Dépannage
| Symptôme | Cause probable | Correctif |
|---|---|---|
ERROR_WRONG_USER_KEY |
Espace parasite ou mauvais compte. | Recopiez la clé et stockez-la en secret CI. |
ERROR_ZERO_BALANCE |
Solde sous le minimum par tâche. | Rechargez et ajoutez une alerte de seuil. |
| Token refusé après résolution | Token appliqué dans une autre session. | Gardez résolution et envoi dans la même session. |
Liste de contrôle avant la mise en production
- Le périmètre reste limité à vos propres applications ou à des sources autorisées par écrit.
- La durée d'appel et le code retour sont tracés à chaque exécution.
- Un retry idempotent avec backoff exponentiel borné couvre les erreurs transitoires.
- Les tests restent rejouables depuis votre intégration continue.
FAQ
OCaml dispose-t-il d'un SDK CaptchaAI officiel ?
Non, et vous n'en avez pas besoin. N'importe quelle bibliothèque HTTP OCaml (Cohttp, ocurl, Piaf) suffit. Le contrat reste identique à celui des exemples Python ou Node.js ; seule la syntaxe change.
Quel plan CaptchaAI convient à un pipeline automatisé ?
La facturation repose sur les threads, pas sur le nombre de résolutions : un thread correspond à un CAPTCHA en cours. Le plan BASIC ($15/mois, 5 threads) suffit à un worker OCaml qui traite les tâches en série ; montez en gamme quand votre parallélisme dépasse les threads inclus.
Comment rester conforme au RGPD en journalisant ces appels ?
Ne conservez que des métadonnées techniques — identifiant de tâche, durée, code retour — et jamais le contenu du formulaire protégé. Cette minimisation facilite vos obligations RGPD sans vous priver de quoi diagnostiquer un incident.
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 du prototype dans utop à une intégration qui tient en production : créez votre clé CaptchaAI et mesurez vos temps de résolution.