Use Cases

Marketplaces NFT : collecter les données publiques et gérer les CAPTCHA

Périmètre sûr : ce guide s'applique à vos propres applications, à vos environnements de QA ou de production, ou à des sources pour lesquelles vous disposez d'une autorisation écrite. Il ne décrit aucune technique visant à échapper aux protections d'un site tiers.

Intégrer la résolution des CAPTCHA dans une collecte de données publiques NFT tient en une branche de code et cinq étapes : détecter la page de défi, envoyer la tâche, interroger le résultat, réinjecter le token dans la même session, reprendre au point d'arrêt. Autrement dit, traitez la résolution comme une étape ordinaire du pipeline, pas comme un incident. Voici comment câbler cette étape avec l'API CaptchaAI, puis comment la superviser.

Pourquoi une collecte NFT rencontre des défis CAPTCHA

Les portails de données NFT publient des indicateurs qui changent toutes les minutes. Vos jobs interrogent donc souvent, depuis quelques adresses seulement : exactement le profil de trafic automatisé que les protections front-end (reCAPTCHA v2 et v3, Cloudflare Turnstile, Cloudflare Challenge) ralentissent.

Le problème n'est pas le défi, c'est l'arrêt silencieux qu'il provoque : une fenêtre vide dans votre base, repérée des semaines plus tard. L'objectif est double — absorber le défi sans intervention manuelle, et mesurer sa fréquence.

Scénario : un fournisseur de données à Paris

Prenons une équipe data européenne qui alimente un tableau de bord d'indicateurs NFT. Trois workers Python tournent sur OVHcloud, un quatrième sur AWS eu-west-3 (Paris) ; chacun interroge une source partenaire au titre d'un accès contractualisé.

Deux contraintes locales pèsent ici. Le RGPD : les données de marché sont publiques, mais dès qu'une adresse de wallet rattachable à une personne entre dans la base, minimisez la collecte, documentez la finalité et fixez une durée de conservation. La facturation : CaptchaAI est facturé en dollars US, à budgéter tel quel.

Sur ce périmètre, une exécution sur quarante environ rencontre un défi : trop rare pour une astreinte, trop fréquent pour être ignoré.

Architecture : où se branche la résolution

L'orchestrateur (cron, Airflow, GitHub Actions) déclenche le job. Quand une réponse renvoie une page de défi au lieu du contenu attendu, le worker bascule sur une branche unique :

  1. Extraire les paramètres du défi : sitekey, URL de la page et, selon le type, action ou proxy. Rien de plus — le superflu crée de fausses pistes de diagnostic.
  2. Envoyer la tâche à l'endpoint in.php avec json=1. Tout statut différent de 1 est une erreur : journalisez la réponse et alertez.
  3. Interroger le résultat sur res.php : 15 s d'attente, puis toutes les 5 s, plafond ferme de 120 s par tâche.
  4. Réinjecter le token dans la même session que celle qui a déclenché le défi : même client HTTP, même cookie jar. Le changement de session est la première cause de rejet.
  5. Reprendre la collecte au point d'arrêt, pas au début du job : une reprise idempotente évite de doubler les lignes déjà écrites.

Le reste du pipeline ne bouge pas : la résolution s'insère dans le workflow existant sans le réécrire.

Exemple de code

Exemple issu d'une suite de tests interne :

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

La logique se transpose telle quelle en Python, Go ou Java. Le détail par type figure dans la résolution de reCAPTCHA v2 via l'API.

Ce qu'il faut mesurer

Ces seuils sont des objectifs de pilotage : ajustez-les selon votre volume et votre environnement.

Indicateur Objectif à fixer Ce que révèle un écart
Temps de résolution médian et P95 Sous 25 s et sous 60 s Vos timeouts sont bien dimensionnés.
Taux de réussite par type Ligne de base par défi Vos paramètres correspondent au défi affiché.
Acceptation en aval Suivie séparément La source accepte le token dans la session utilisée.

Séparez les journaux par environnement et propagez l'identifiant de traçage distribué (OpenTelemetry) jusqu'à l'identifiant de tâche : un incident se rejoue alors depuis un seul identifiant.

Dimensionner les threads

CaptchaAI facture des threads simultanés, pas des résolutions à l'unité : chaque plan inclut des résolutions illimitées par thread sur le mois. Un thread correspond à un défi en cours ; dès qu'il se termine, il reprend le suivant.

Pour la collecte décrite plus haut, BASIC ($15/mois, 5 threads) suffit, les défis n'arrivant presque jamais en parallèle. En multipliant les sources, visez STANDARD ($30/mois, 15 threads) ou ADVANCE ($90/mois, 50 threads). Dimensionnez sur le pic, jamais sur le volume mensuel.

Dépannage

Symptôme Cause probable Correctif
ERROR_WRONG_USER_KEY Clé copiée avec un espace parasite. Recopiez la clé et stockez-la en secret CI.
ERROR_PAGEURL / ERROR_BAD_PARAMETERS Paramètre manquant ou mal formé. Revalidez l'URL et le sitekey face au HTML servi.
CAPCHA_NOT_READY jusqu'au timeout Interrogation trop précoce. 15 s d'attente, puis toutes les 5 s, plafond 120 s.
Trou de données sans erreur Arrêt du job sans alerte. Comptez les défis comme métrique, pas comme log.

Liste de contrôle avant mise en production

  • Périmètre limité à vos applications ou à des sources autorisées par écrit.
  • Clé API dans un coffre ou un secret CI, jamais dans le code source.
  • Retries bornés (trois tentatives, backoff exponentiel, plafond 30 s) et reprise idempotente.
  • Défis, temps de résolution et acceptation en aval sur un tableau de bord unique.

FAQ

CaptchaAI prend-il en charge hCaptcha sur ce type de source ?

Non — hCaptcha n'est pas pris en charge, pas plus que FunCaptcha (Arkose Labs) ; GeeTest v4 est annoncé à venir. Sont couverts reCAPTCHA v2 et v3, Cloudflare Turnstile, Cloudflare Challenge, GeeTest v3 et les CAPTCHA image, texte et grilles d'images. CaptchaFox (bêta), Friendly Captcha (bêta) et Lemin (bêta) restent en bêta.

Combien de threads prévoir pour une collecte quotidienne ?

Comptez les défis traités en même temps, pas le total journalier. Quatre workers qui en croisent un de temps à autre tiennent dans BASIC ($15/mois, 5 threads) ; dix résolutions concurrentes en pic appellent STANDARD ($30/mois, 15 threads).

Que faire si le token est accepté par l'API mais refusé par la source ?

Vérifiez la session : cookies, en-têtes et adresse de sortie doivent être identiques entre la page qui a affiché le défi et la requête portant le token. Vérifiez ensuite le délai, un token appliqué trop tard ayant pu expirer.

Cette approche est-elle compatible avec le RGPD ?

La gestion du CAPTCHA ne traite pas de données personnelles, mais votre collecte, si. Documentez la finalité, minimisez les champs conservés, fixez une durée de rétention et validez vos obligations avec votre référent conformité. Ce guide n'est pas un avis juridique.

Guides connexes

Branchez une étape de résolution fiable sur votre chaîne de collecte, puis mesurez-la comme le reste du pipeline. – Obtenez votre clé CaptchaAI.

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