Tutorials

Résolution de CAPTCHAs depuis Gleam (BEAM Type-Safe)

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

Gleam compile vers la BEAM (la machine virtuelle d'Erlang) et vers JavaScript. Pour résoudre un CAPTCHA depuis Gleam, rien de spécial à installer : vous appelez l'API HTTP de CaptchaAI en soumettant une tâche puis en interrogeant le résultat. Reste à le structurer pour qu'il tienne en CI ou en tâche planifiée, pas seulement en démonstration.

Ce que le typage de Gleam apporte

Le type Result de Gleam convient bien à un appel réseau faillible : chaque réponse — token obtenu, tâche en cours, erreur réelle — devient une branche que le compilateur vous oblige à traiter. Vous obtenez ainsi des modes d'échec propres et un code lisible. CaptchaAI expose une API unique sur toutes ces familles et facture au thread : le plan BASIC ($15/mois, 5 threads) inclut un nombre illimité de résolutions par thread.

Encapsuler l'appel à CaptchaAI

Isolez l'appel dans une fonction réutilisable qui prend la sitekey et l'URL de votre propre page, soumet la tâche et renvoie son identifiant. Écrite en Gleam (gleam/httpc) ou dans sa cible JavaScript, elle garde la logique métier à l'écart du transport. L'exemple ci-dessous crée une tâche Turnstile et retourne le taskId :

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

Le déroulé, étape par étape

Le contrat reste identique quel que soit le langage appelant. Suivez-le dans l'ordre :

  1. Préparez un environnement isolé. Séparez le test de la production, stockez la clé CaptchaAI dans un secret de CI, et côté RGPD ne laissez transiter aucune donnée personnelle réelle.
  2. Soumettez la tâche et récupérez son taskId, comme dans la fonction ci-dessus.
  3. Interrogez le résultat : attendez 15 secondes, puis toutes les 5 secondes, avec un plafond de 120 secondes par tâche. Distinguez « tâche en cours » et « erreur réelle », ce que le Result de Gleam clarifie.
  4. Vérifiez le token côté backend, puis appliquez-le dans la session qui a déclenché le défi (même navigateur, même client HTTP, mêmes cookies). Une session dépareillée est la première cause de rejet.
  5. Tracez la durée, le code retour et le taskId à chaque exécution.

Observabilité et mesure

Séparez les journaux par environnement et corrélez chaque identifiant à votre traçage distribué (OpenTelemetry, par exemple) : vous rejouez un scénario complet à partir d'un seul taskId. Deux indicateurs suffisent : la latence médiane d'obtention du token et l'écart entre réussite du solveur et acceptation en aval. Ce sont des objectifs, pas des promesses : ils varient selon l'environnement et le volume.

Dépannage

Ces codes couvrent la plupart des tickets de support sur ce type d'intégration.

Symptôme Cause probable Correctif
ERROR_WRONG_USER_KEY Espace parasite ou mauvais compte. Recopiez la clé, stockée en secret de CI.
ERROR_ZERO_BALANCE Solde sous le minimum par tâche. Rechargez et ajoutez une alerte de solde.
ERROR_BAD_PARAMETERS Paramètre requis absent ou mal formé. Revalidez l'URL, la sitekey et les champs du solveur.
Token refusé après résolution Session différente de celle du défi. Même session pour la résolution et l'envoi.

Liste de contrôle

  • Périmètre limité à vos applications ou à des sources autorisées.
  • Clé CaptchaAI en secret de CI ou en coffre, jamais en dur.
  • Durées d'appel et codes retour tracés à chaque exécution.
  • Retry plafonné à trois tentatives avec backoff exponentiel.
  • Token appliqué dans la session du défi, puis vérifié côté backend.

FAQ

Peut-on appeler l'API CaptchaAI directement depuis Gleam ?

Oui. Gleam expose des clients HTTP (gleam/httpc ou fetch) et l'API n'attend que du JSON : vous soumettez une tâche, récupérez un taskId, puis interrogez le résultat — aucune bibliothèque spécifique n'est requise.

CaptchaAI prend-il en charge hCaptcha depuis Gleam ?

Non — hCaptcha et FunCaptcha (Arkose Labs) ne sont pas pris en charge, et GeeTest v4 est seulement annoncé comme à venir. Sont couverts : reCAPTCHA v2 et v3, Cloudflare Turnstile et Challenge, GeeTest v3 et image/OCR, plus CaptchaFox, Friendly Captcha et Lemin en bêta.

Combien coûte la résolution quand le volume augmente ?

La facturation est au thread, pas à la résolution : chaque thread traite un CAPTCHA à la fois, avec des résolutions illimitées dans le mois. Le plan BASIC ($15/mois, 5 threads) suffit pour démarrer, puis vous montez en threads selon la concurrence. Les vrais postes de coût sont les mauvais paramètres et les retries en boucle.

Guides connexes

Passez d'un prototype à une intégration CaptchaAI stable, mesurée et reproductible. – Obtenez votre clé CaptchaAI.

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