Tutorials

Résolution de CAPTCHAs depuis un Crystal HTTP client

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.

Pour résoudre un CAPTCHA depuis un client HTTP écrit en Crystal, vous n'avez besoin d'aucun SDK dédié : l'API CaptchaAI expose un contrat simple — envoyer une tâche, interroger le résultat, appliquer le token — que le HTTP::Client de Crystal consomme comme n'importe quel service REST. Ce guide montre comment industrialiser ce flux pour qu'il tienne en intégration continue ou en tâche planifiée.

Déroulé recommandé

Trois étapes suffisent, dans cet ordre, et elles restent identiques quel que soit le type de CAPTCHA visé :

  1. Isolez l'environnement. Séparez le test de la production, stockez la clé CaptchaAI en secret CI ou en coffre (jamais dans le dépôt) et vérifiez que vos endpoints internes acceptent le trafic de test. Un environnement propre élimine la plupart des incidents avant le premier appel.
  2. Encapsulez l'appel. Isolez la résolution dans une fonction réutilisable qui reçoit la sitekey et l'URL de votre propre page, renvoie un token et journalise la durée et le code retour. Ce point d'entrée unique vous permet de changer de type de CAPTCHA (reCAPTCHA v2, Cloudflare Turnstile, image) sans toucher au code appelant.
  3. Vérifiez le token côté backend. Validez toujours le token sur votre backend avant toute opération métier : cette étape empêche qu'une requête soit acceptée sur la foi d'un token périmé ou forgé, et distingue une résolution réussie d'un workflow abouti — deux métriques à suivre séparément.

Exemple : appeler l'API depuis Node.js

L'exemple ci-dessous, transposable tel quel vers le HTTP::Client de Crystal, encapsule la création d'une tâche Turnstile :

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

Instrumentez chaque appel CAPTCHA pour obtenir des métriques exploitables : durée d'obtention du token, code retour HTTP, identifiant de tâche et taille de la file interne. Ces signaux alimentent vos tableaux de bord de QA et rendent visibles les régressions avant vos utilisateurs.

Séparez les journaux par environnement et corrélez-les à votre traçage distribué (par exemple OpenTelemetry) pour rejouer un scénario depuis un identifiant unique. Côté RGPD, ne consignez que les métadonnées techniques : ni données personnelles, ni contenu de formulaire.

Liste de contrôle avant la mise en production

  • Le périmètre est limité à vos propres applications ou à des sources autorisées.
  • La clé CaptchaAI est stockée en secret CI ou en coffre, jamais dans le code source.
  • Les durées d'appel et les codes retour sont tracés à chaque exécution.
  • Un retry idempotent avec backoff exponentiel borné gère les erreurs transitoires.
  • Le token est appliqué dans la même session que celle qui a déclenché le défi.
  • Les tests sont rejouables depuis votre intégration continue.

Dépannage

La plupart des tickets tiennent à quatre causes récurrentes.

Symptôme Cause probable Correctif
ERROR_WRONG_USER_KEY Clé mal copiée 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 seuil.
ERROR_BAD_PARAMETERS sitekey ou URL de page manquante. Revalidez les paramètres contre le HTML réel.
Token refusé après résolution Token appliqué dans une autre session. Gardez résolution et soumission dans la même session.

FAQ

Peut-on appeler l'API CaptchaAI depuis Crystal sans bibliothèque dédiée ?

Oui. Le HTTP::Client de la bibliothèque standard suffit : vous envoyez la tâche, interrogez le résultat, appliquez le token. Aucun paquet spécifique n'est requis, et le même contrat submit/poll se transpose vers Go, Ruby ou Java sans changer la logique.

Pourquoi mon token est-il refusé alors que la résolution a réussi ?

Presque toujours parce qu'il est appliqué dans une session différente de celle qui a déclenché le défi. Réutilisez le même client HTTP, le même contexte et les mêmes cookies entre la résolution et la soumission du formulaire.

Quel plan CaptchaAI choisir pour un pipeline CI ?

Le plan BASIC ($15/mois, 5 threads) couvre la plupart des pipelines : facturation par thread, résolutions illimitées par thread. Un thread traite un CAPTCHA à la fois ; dimensionnez-les sur votre concurrence réelle, pas sur le volume total.

Ce guide couvre-t-il l'automatisation de sites tiers ?

Non. Tous les exemples portent sur vos propres applications ou sur des environnements pour lesquels vous détenez une autorisation écrite. Pour une source externe, validez d'abord les conditions d'utilisation et la base juridique avant toute automatisation.

Guides connexes

Améliorez vos workflows CAPTCHA avec une approche méthodique et reproductible. – Obtenez votre clé CaptchaAI.

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