Fiddler se place entre votre code et l'API CaptchaAI et enregistre chaque requête et chaque réponse HTTPS qui transitent. C'est le moyen le plus direct de comprendre pourquoi une résolution échoue quand vos logs applicatifs restent muets : vous voyez les payloads, les en-têtes et le timing exacts, tels qu'ils partent et tels qu'ils reviennent.
Avant de commencer : ce qu'il vous faut
Cette inspection ne touche pas à votre code de production : vous branchez un proxy le temps de capturer une session. Réunissez de quoi reproduire le problème sur le fil :
- Fiddler Everywhere ou Fiddler Classic installé sur le poste qui exécute votre intégration ;
- une intégration CaptchaAI qui tourne déjà (script Python, worker Node.js, peu importe) et déclenche le comportement à diagnostiquer ;
- votre clé API sous la main, ainsi que le sitekey et l'URL de la page ciblée ;
- les droits administrateur nécessaires pour approuver un certificat racine sur votre système.
Pourquoi inspecter le trafic plutôt que relire vos logs
Un log applicatif vous dit ce que votre code croit avoir envoyé ; Fiddler montre ce qui est réellement parti sur le fil vers ocr.captchaai.com. La plupart des bugs d'intégration vivent dans l'écart entre les deux.
Sortez donc Fiddler dès que le symptôme se situe entre votre machine et le serveur, là où la trace applicative ne suffit plus :
- L'API renvoie des erreurs mais vos logs sont trop pauvres — vous récupérez le corps complet de la requête, les en-têtes et la réponse exacte.
- Les requêtes de résolution semblent bloquées — vous voyez si elles atteignent le serveur ou expirent en route.
- Le token paraît invalide une fois injecté — vous lisez son contenu exact et repérez un éventuel souci d'encodage.
- Une panne semble liée au proxy — vous confirmez si le trafic passe bien par le proxy attendu.
- Vous soupçonnez une limitation de débit — vous mesurez la cadence des requêtes et repérez les réponses 429.
Configurer le déchiffrement HTTPS
L'API CaptchaAI est servie en HTTPS. Sans déchiffrement, Fiddler ne montre qu'un tunnel CONNECT opaque : la connexion est visible, jamais le payload. Les deux étapes ci-dessous se font une seule fois par poste.
Étape 1 : activer le déchiffrement HTTPS
Fiddler agit comme un proxy local qui intercepte le trafic HTTPS. Activez le déchiffrement pour lire en clair les payloads de l'API CaptchaAI.
Fiddler Everywhere :
- Ouvrez Settings → HTTPS
- Activez « Capture HTTPS traffic »
- Installez le certificat racine de Fiddler lorsque l'invite apparaît
- Approuvez ce certificat dans le magasin de certificats de votre système
Fiddler Classic (Windows) :
- Tools → Options → HTTPS
- Cochez « Decrypt HTTPS traffic »
- Cliquez sur « Actions » → « Trust Root Certificate »
Étape 2 : router votre code vers le proxy de Fiddler
Fiddler écoute sur 127.0.0.1:8866 (Fiddler Everywhere) ou 127.0.0.1:8888 (Fiddler Classic). Faites pointer votre client HTTP vers ce proxy.
Python (requests) :
import requests
proxies = {
"http": "http://127.0.0.1:8866",
"https": "http://127.0.0.1:8866",
}
# Submit CAPTCHA task through Fiddler
response = requests.post(
"https://ocr.captchaai.com/in.php",
data={
"key": "YOUR_API_KEY",
"method": "userrecaptcha",
"googlekey": "SITE_KEY",
"pageurl": "https://example.com",
"json": 1,
},
proxies=proxies,
verify=False, # Required for Fiddler's self-signed cert
)
print(response.json())
JavaScript (Node.js avec axios) :
const axios = require("axios");
const HttpsProxyAgent = require("https-proxy-agent");
const agent = new HttpsProxyAgent("http://127.0.0.1:8866");
async function submitTask() {
const response = await axios.post(
"https://ocr.captchaai.com/in.php",
new URLSearchParams({
key: "YOUR_API_KEY",
method: "userrecaptcha",
googlekey: "SITE_KEY",
pageurl: "https://example.com",
json: 1,
}),
{
httpsAgent: agent,
proxy: false, // Disable axios default proxy handling
}
);
console.log(response.data);
}
submitTask();
Remarque :
verify=False(Python) désactive la vérification SSL face au certificat d'interception de Fiddler. Réservez-le au débogage et retirez-le en production, où la vérification du certificat doit rester active.
Valider l'API en une requête avec le Composer
Le Composer de Fiddler construit une requête CaptchaAI de zéro : le chemin le plus court pour vérifier qu'une clé fonctionne et qu'un endpoint répond, sans écrire de code.
Soumission d'une tâche :
POST https://ocr.captchaai.com/in.php
Content-Type: application/x-www-form-urlencoded
key=YOUR_API_KEY&method=userrecaptcha&googlekey=SITE_KEY&pageurl=https://example.com&json=1
Interrogation du résultat :
GET https://ocr.captchaai.com/res.php?key=YOUR_API_KEY&action=get&id=TASK_ID&json=1
Si la soumission renvoie un TASK_ID et l'interrogation un token, votre clé et vos endpoints sont bons : le problème est ailleurs, dans votre code.
Filtrer le trafic pour ne garder que CaptchaAI
Dès qu'une application réelle tourne, la liste des sessions se remplit de trafic sans rapport. Un filtre par hôte ne conserve que ce qui concerne ocr.captchaai.com.
Dans Fiddler Everywhere
- Ouvrez l'onglet Filters
- Ajoutez une règle : Host →
contains→ocr.captchaai.com - Appliquez le filtre
Dans Fiddler Classic
- Ouvrez l'onglet Filters
- Cochez « Use Filters »
- Sous « Hosts », choisissez « Show only the following Hosts » et saisissez
ocr.captchaai.com
Lire la requête et la réponse champ par champ
L'échange CaptchaAI se fait en deux temps : la soumission de la tâche sur in.php, puis l'interrogation régulière du résultat sur res.php. Fiddler vous laisse ouvrir chacune de ces sessions et vérifier chaque champ.
Soumission de la tâche (in.php)
À la capture d'une soumission, contrôlez que la requête et la réponse sont conformes :
- En-têtes — le Content-Type doit être
application/x-www-form-urlencoded. - Corps de la requête —
key,method,googlekey/sitekeyetpageurlsont présents et corrects. - Corps de la réponse — un succès renvoie
{"status":1,"request":"TASK_ID"}. - Code HTTP — 200 = OK, 403 = problème de clé, 429 = débit limité.
Interrogation du résultat (res.php)
Pendant que votre code interroge le résultat, ouvrez une session de polling et vérifiez :
- Corps de la requête —
key,action=get,id=TASK_ID,json=1. - Corps de la réponse —
CAPCHA_NOT_READYpendant le traitement, puis{"status":1,"request":"TOKEN"}en cas de succès. - Cadence — l'intervalle entre deux interrogations doit rester au-dessus de 5 s.
Anomalies fréquentes repérables dans Fiddler
Certaines réponses parlent d'elles-mêmes une fois lues en clair :
googlekeyvide dans le corps de la requête — l'extraction du sitekey a échoué en amont.{"status":0,"request":"ERROR_WRONG_USER_KEY"}— la clé API est invalide.{"status":0,"request":"ERROR_ZERO_BALANCE"}— le solde du compte est à zéro.{"status":0,"request":"ERROR_NO_SLOT_AVAILABLE"}— serveur saturé, réessayez après une courte pause.- Aucune réponse (timeout) ou code 429 — réseau, proxy ou cadence trop agressive.
Modifier une requête et rejouer une session
Deux gestes testent un correctif sans repasser par votre code : suspendre une requête pour la réécrire, ou rejouer une session telle quelle.
Suspendre et modifier une requête avant l'envoi
Un point d'arrêt suspend une requête avant son envoi et vous laisse en réécrire les paramètres. Dans Fiddler Everywhere, ajoutez une règle « Pause before sending » sur les URL contenant ocr.captchaai.com/in.php ; dans Fiddler Classic, activez Rules → Automatic Breakpoints → Before Requests ou tapez bpu ocr.captchaai.com dans la barre QuickExec. Une fois la requête en pause :
- Inspectez le corps de la requête : tous les paramètres sont-ils présents et corrects ?
- Modifiez un paramètre : changez
method,googlekeyoupageurlpour tester une autre valeur. - Reprenez : cliquez sur « Run to Completion » pour envoyer la version modifiée.
- Contrôlez la réponse : voyez si votre changement a levé le problème.
Vous confirmez ainsi qu'une valeur provoque l'échec, sans recompiler ni redéployer.
Rejouer une session en échec
Quand une session a échoué, inutile de relancer toute l'application : Fiddler la rejoue telle quelle.
- Faites un clic droit sur la session en échec, puis Replay → Reissue Requests — la même requête repart avec des en-têtes et un corps identiques.
- Pour rejouer en modifiant les paramètres, choisissez plutôt Edit in Composer, ajustez les valeurs, puis cliquez sur Execute.
Mesurer le timing requête par requête
La vue Timeline de Fiddler décompose la durée de chaque requête. Ces seuils sont indicatifs et dépendent de votre réseau et de votre localisation : une latence plus élevée depuis une région eu-west-3 (Paris) vers un serveur distant reste normale.
| Étape | Valeur saine | Signal d'alerte |
|---|---|---|
| Résolution DNS | < 50 ms | > 500 ms = problème DNS |
| Connexion TCP | < 100 ms | > 1000 ms = problème réseau |
| Handshake TLS | < 200 ms | > 1000 ms = problème de certificat |
| Réponse serveur (in.php) | < 500 ms | > 2000 ms = congestion serveur |
| Réponse serveur (res.php) | < 200 ms | > 1000 ms = inhabituel, vérifiez l'état du service |
Exporter une session pour le support CaptchaAI
Pour partager des données de débogage avec le support, n'exportez que les sessions réellement utiles :
- Sélectionnez les sessions pertinentes dans Fiddler
- File → Export Sessions → Selected Sessions
- Choisissez le format HTTPArchive (.har)
- Retirez votre clé API du fichier avant de l'envoyer
Nettoyer le fichier avant de l'envoyer
Un fichier .har capture aussi les en-têtes et parfois des URL contenant des données personnelles.
Find and replace your actual API key with "REDACTED" in the .har file
Avant de transmettre l'archive, appliquez le réflexe RGPD : ne partagez que les sessions nécessaires et masquez tout identifiant inutile dans un ticket de support.
Dépannage
| Problème | Cause | Correctif |
|---|---|---|
| Fiddler n'affiche aucun trafic | Le code ne passe pas par le proxy de Fiddler | Pointez le proxy sur 127.0.0.1:8866 (Everywhere) ou 8888 (Classic) |
| Erreurs de certificat SSL | Le certificat racine de Fiddler n'est pas approuvé | Réinstallez le certificat et ajoutez-le aux racines de confiance |
| Corps de réponse illisible | La réponse est compressée | Activez « Decode » dans la barre d'outils (ou Rules → Remove All Encodings) |
| Les points d'arrêt ne se déclenchent pas | Filtre ou règle mal configuré | Vérifiez que le motif d'URL correspond exactement à ocr.captchaai.com |
| Le trafic apparaît mais le corps reste vide | Content-Length incohérent ou réponse en streaming | Cliquez sur la session et attendez le chargement complet de la réponse |
FAQ
Comment retirer ma clé API d'un export .har avant de l'envoyer au support ?
Ouvrez le fichier .har dans un éditeur de texte et remplacez votre clé réelle par REDACTED partout où elle apparaît. Vérifiez aussi les URL et les en-têtes : la clé peut figurer à la fois dans le corps POST de in.php et dans la query string de res.php.
Pourquoi Fiddler affiche-t-il une erreur de certificat sur les requêtes CaptchaAI ?
Parce que son certificat racine n'est pas encore approuvé par votre système ou par votre client HTTP. Réinstallez le certificat depuis les paramètres HTTPS de Fiddler et ajoutez-le aux racines de confiance. En Python, verify=False contourne le problème le temps du débogage, mais ce n'est pas un réglage à laisser en production.
Fiddler fausse-t-il la mesure du temps de résolution ?
Très peu. Le saut par le proxy ajoute de l'ordre de 1 à 5 ms par requête, négligeable face au temps de résolution d'un CAPTCHA. Rappelez-vous que les horodatages de Fiddler marquent le moment où il a reçu les données, pas celui où votre code les a émises.
Puis-je modifier les paramètres d'une requête sans toucher à mon code ?
Oui. Posez un point d'arrêt « avant envoi » sur ocr.captchaai.com/in.php, changez method, googlekey ou pageurl dans la requête suspendue, puis reprenez l'exécution. Le Composer permet la même chose pour rejouer une requête modifiée sans redéployer l'application.
Articles connexes
- Restreindre l'accès à votre clé API par liste blanche d'IP
- Faire tourner vos clés API en toute sécurité
- Cartographier les endpoints de l'API face aux concurrents
Prochaines étapes
Des messages d'erreur d'API lisibles accélèrent le débogage : créez votre compte CaptchaAI et gardez Fiddler sous la main pour les cas qui demandent une inspection fine des requêtes.
Guides associés :