API Tutorials

PowerShell + CaptchaAI : automatisation Windows interne

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 couvre ni l'automatisation de sites tiers, ni les techniques d'anti-détection.

Une tâche planifiée sur Windows Server rend un rapport vide, et le journal ne dit qu'une chose : le formulaire attendait un CAPTCHA. Le correctif tient dans le script lui-même : envoyez la tâche à l'API CaptchaAI via Invoke-RestMethod, interrogez le résultat jusqu'à obtenir le token, puis postez-le au formulaire de votre application. Aucun module à installer, aucun navigateur headless à maintenir sur le serveur.

Pourquoi PowerShell reste le bon outil sur un parc Windows

PowerShell 5.1 est déjà présent sur tout Windows Server, et PowerShell 7 tourne aussi sous Linux si vos agents CI sont mixtes. Trois propriétés le rendent adapté aux vérifications qui croisent un CAPTCHA :

  • Invoke-RestMethod parse le JSON automatiquement : aucune dépendance HTTP externe à faire valider par votre équipe sécurité.
  • Le Planificateur de tâches (Task Scheduler) déclenche vos scripts sans ordonnanceur supplémentaire.
  • Les jobs (Start-Job) permettent d'exécuter plusieurs résolutions en parallèle, ce qui correspond exactement au modèle de facturation par threads de CaptchaAI.

Protéger la clé API sur un serveur Windows

La clé ne doit jamais apparaître dans un .ps1 versionné. Deux options tiennent la route en interne :

  • Windows Credential Manager pour un serveur qui exécute la tâche localement : la clé est chiffrée par compte de service et lue au démarrage du script.
  • Un secret de pipeline (variable protégée Azure DevOps, secret GitHub Actions, credential Jenkins) quand le script tourne sur un agent éphémère.

Dans les deux cas, exposez la valeur via une variable d'environnement et ne l'écrivez jamais dans les logs. Si des prestataires accèdent au poste, renouvelez la clé après chaque intervention plutôt que de compter sur les droits NTFS.

Le déroulé d'un appel : soumettre, interroger, injecter, vérifier

Le cycle est toujours le même, quel que soit le type de défi :

  1. Soumettre la tâche à in.php avec la méthode correspondante (userrecaptcha, turnstile, post pour l'image) et récupérer l'identifiant de tâche.
  2. Interroger res.php toutes les 5 secondes ; tant que la réponse vaut CAPCHA_NOT_READY, poursuivez l'interrogation. Un polling plus serré ne raccourcit pas la résolution et multiplie les requêtes pour rien.
  3. Injecter le token dans le champ attendu par votre page — g-recaptcha-response pour reCAPTCHA, cf-turnstile-response pour Turnstile — puis envoyer le formulaire.
  4. Vérifier côté serveur que la validation est bien acceptée, et pas seulement que la requête a renvoyé un code 200.

La dernière étape est celle qu'on oublie le plus souvent : un test de fumée qui poste le token sur votre propre endpoint de vérification vous dit si la chaîne complète fonctionne.

# Test de fumée PowerShell contre votre endpoint QA interne.
$payload = @{ token = $env:TOKEN } | ConvertTo-Json
Invoke-RestMethod -Method Post -Uri "$env:QA_BASE_URL/api/captcha/verify" `
  -ContentType 'application/json' -Body $payload

Prévoyez un timeout global (300 secondes est un point de départ raisonnable) et un retry avec backoff exponentiel borné : trois tentatives, délai doublé à chaque essai, plafond à 30 secondes.

Dimensionner les threads pour un parc interne

CaptchaAI facture des threads simultanés, pas des résolutions à l'unité : chaque plan inclut un nombre de résolutions illimité par thread sur le mois. Le calcul porte donc sur le parallélisme.

Prenons une équipe QA lyonnaise qui lance une campagne nocturne sur un Windows Server hébergé chez OVHcloud : vingt scénarios en parallèle via Start-Job, chacun traversant un formulaire protégé par Turnstile. Le pic de résolutions simultanées est de vingt. STANDARD ($30/mois, 15 threads) sature ; ADVANCE ($90/mois, 50 threads) laisse de la marge pour les reprises. Deux ou trois vérifications planifiées par heure tiennent sans problème sur BASIC ($15/mois, 5 threads).

Mesurez votre pic réel : un compteur incrémenté à l'envoi et décrémenté à la réception du token suffit à trancher.

Planifier et brancher sur l'intégration continue

Pour une exécution récurrente, New-ScheduledTaskAction et New-ScheduledTaskTrigger couvrent le besoin sans ordonnanceur externe. Faites tourner la tâche sous un compte de service dédié, avec une politique d'exécution RemoteSigned et des scripts signés plutôt qu'une exception passée en argument.

Côté CI, le même script tourne tel quel sur un agent Windows Azure DevOps, GitHub Actions ou Jenkins. Publiez le code retour et la durée d'obtention du token comme artefacts du job.

Ce qu'il faut journaliser

Instrumentez chaque appel CAPTCHA avec quatre valeurs : la durée totale d'obtention du token, le code retour HTTP, l'identifiant de tâche et la profondeur de votre file d'attente interne. Ces signaux font la différence entre « le test a échoué » et « le temps de résolution a doublé depuis mardi ».

Séparez les journaux par environnement et corrélez-les à votre traçage distribué, par exemple OpenTelemetry : un identifiant unique doit suffire à rejouer un scénario. Appliquez au passage la minimisation RGPD — pas d'identifiants réels, pas de token complet, pas de données personnelles issues des formulaires.

Liste de contrôle avant mise en production

  • Le périmètre est strictement limité à vos propres applications ou à des sources autorisées.

  • La clé CaptchaAI est stockée dans un coffre ou un secret CI, jamais dans le code source.

  • Les durées d'appel et les codes retour sont tracés pour chaque exécution.

  • Une stratégie de retry idempotent est en place pour les erreurs transitoires.

  • Le plan choisi couvre le pic de résolutions simultanées, pas la moyenne.

  • Les tests sont rejouables et reproductibles depuis votre intégration continue.

FAQ

Quels types de CAPTCHA puis-je résoudre depuis PowerShell ?

reCAPTCHA v2 (y compris Invisible et Enterprise), reCAPTCHA v3, Cloudflare Turnstile, Cloudflare Challenge, GeeTest v3, les CAPTCHA image en OCR et les grilles d'images. CaptchaFox (bêta), Friendly Captcha (bêta) et Lemin (bêta) s'y ajoutent. hCaptcha et FunCaptcha ne sont pas pris en charge, et GeeTest v4 est annoncé comme à venir.

Comment lire la clé API sur un serveur sans session interactive ?

Stockez-la dans Windows Credential Manager sous le compte de service qui exécute la tâche, ou injectez-la depuis votre secret CI. Évitez Read-Host : une tâche planifiée n'a personne pour répondre.

Combien de threads prévoir pour vingt scénarios en parallèle ?

Comptez un thread par résolution simultanée, plus une marge pour les reprises. Vingt jobs concurrents demandent au minimum vingt threads : ADVANCE ($90/mois, 50 threads) est le premier palier confortable ; BASIC ($15/mois, 5 threads) convient aux vérifications ponctuelles.

Que faire quand le polling expire ou renvoie une erreur transitoire ?

Appliquez un backoff exponentiel borné (trois tentatives, plafond à 30 secondes) et enregistrez l'identifiant de tâche. Si l'erreur persiste, vérifiez la couche réseau du serveur — TLS 1.2 forcé, proxy d'entreprise, DNS — puis le solde du compte.

Guides connexes

Rendez vos vérifications Windows reproductibles, mesurables et documentées. – Obtenez votre clé CaptchaAI.

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