Charles Proxy vous montre ce que votre code envoie à CaptchaAI et ce que l'API renvoie : corps de requête, en-têtes, codes de réponse et timing. Quand une intégration reCAPTCHA ou Turnstile échoue sans message clair, ce trafic HTTP brut révèle où le problème se cache — un paramètre absent, un googlekey vide ou un token jamais injecté.
Placé entre votre script et ocr.captchaai.com, Charles intercepte chaque échange. Ce guide le configure pour le HTTPS, corrige les erreurs fréquentes, puis vérifie chaque requête.
Installer et configurer Charles Proxy
1. Installez Charles Proxy
Téléchargez-le depuis le site officiel de Charles Proxy. Il fonctionne sur Windows, macOS et Linux ; l'essai gratuit suffit pour une session de débogage.
2. Activez le proxy SSL pour le HTTPS
CaptchaAI communique en HTTPS : sans déchiffrement, Charles n'affiche qu'un tunnel illisible. Pour lire les échanges avec ocr.captchaai.com :
| Étape | Menu Charles |
|---|---|
| Ajouter l'hôte | Proxy → SSL Proxying Settings → Add |
| Cible | ocr.captchaai.com:443 |
| Certificat racine | Help → SSL Proxying → Install Charles Root Certificate, puis approuvez-le dans votre système |
3. Faites passer votre code par Charles
Par défaut, Charles écoute sur localhost:8888. Pointez-y votre client HTTP.
Python :
import requests
proxies = {
"http": "http://localhost:8888",
"https": "http://localhost:8888",
}
# Disable SSL verification for Charles (development only)
resp = requests.post(
"https://ocr.captchaai.com/in.php",
data={"key": "YOUR_API_KEY", "method": "userrecaptcha", "json": "1"},
proxies=proxies,
verify=False,
)
Node.js :
const axios = require('axios');
const HttpsProxyAgent = require('https-proxy-agent');
const agent = new HttpsProxyAgent('http://localhost:8888');
const resp = await axios.post('https://ocr.captchaai.com/in.php', null, {
params: { key: 'YOUR_API_KEY', method: 'userrecaptcha', json: 1 },
httpsAgent: agent,
});
verify=False désactive la vérification TLS pour accepter le certificat de Charles ; réservez-le au dev local.
Résoudre les erreurs les plus fréquentes
La plupart des pannes se lisent dans le trafic capturé.
ERROR_WRONG_GOOGLEKEY : un sitekey vide
Cas typique : chez une équipe QA à Lyon, cette erreur surgit quand le sitekey est injecté tardivement par JavaScript. Ouvrez le corps de la requête d'envoi et repérez le champ googlekey :
# What Charles shows:
key=YOUR_API_KEY&method=userrecaptcha&googlekey=&pageurl=https://example.com&json=1
^^^^^^^^ empty!
Correctif : l'extraction du sitekey a échoué en amont. Vérifiez le code qui lit la clé et attendez que l'élément soit présent avant de la lire.
Requêtes qui expirent
Ouvrez la vue Sequence de Charles pour visualiser le timing de bout en bout :
POST /in.php → 234ms ✓
GET /res.php → 189ms (CAPCHA_NOT_READY)
GET /res.php → 201ms (CAPCHA_NOT_READY)
GET /res.php → 195ms (CAPCHA_NOT_READY)
... 23 more ...
GET /res.php → 188ms (CAPCHA_NOT_READY) ← never resolves
Si la tâche ne se résout jamais, le sitekey ou l'URL sont probablement erronés : recoupez-les avec le corps de /in.php.
Token refusé par le site cible
Le token est bien renvoyé, mais le site le rejette. Comparez la réponse de l'API et ce que vous injectez :
| Étape | Vérification |
|---|---|
Réponse /res.php |
Celle dont le status: 1 |
Champ request |
Copiez le token complet |
| Requête vers le site | Le token doit y figurer sous g-recaptcha-response |
Vérifier méthodiquement chaque requête
Pour les pannes moins évidentes, passez chaque appel en revue.
La requête d'envoi (POST /in.php)
Sélectionnez l'appel /in.php et contrôlez chaque onglet :
| Onglet | À vérifier |
|---|---|
| Request → Headers | Content-Type correct |
| Request → Body | Paramètres requis présents |
| Response → Body | {"status":1,"request":"TASK_ID"} si succès |
| Timing | Durée < 1 s |
Les symptômes les plus courants :
| Signe dans Charles | Diagnostic |
|---|---|
method absent |
ERROR_BAD_PARAMETERS |
| Mauvais Content-Type | Paramètres non analysés |
| Corps JSON mal formé | Utilisez des données de formulaire |
La requête de polling (GET /res.php)
Inspectez ensuite les requêtes qui interrogent le résultat :
| Élément | Attendu |
|---|---|
| Paramètres | key, action=get, id=TASK_ID |
| Réponse | CAPCHA_NOT_READY ou {"status":1,"request":"TOKEN"} |
Côté RGPD, une session capture le trafic en clair : ne conservez pas les sessions contenant des données personnelles au-delà du débogage.
Les fonctions Charles utiles au débogage CAPTCHA
Rejouer une requête
Clic droit sur une requête → Repeat pour la renvoyer. Pratique pour tester les interrogations /res.php sans relancer tout votre script.
Points d'arrêt
Un point d'arrêt sur /in.php met le code en pause avant l'envoi : ajustez les paramètres à la volée.
| Réglage | Valeur |
|---|---|
| Menu | Proxy → Breakpoint Settings → Add |
| Cible | ocr.captchaai.com, /in.php |
| Sens | Request |
Map Local : simuler les réponses de l'API
Map Local sert une réponse locale : votre code d'injection de token s'exécute sans mobiliser un thread.
| Étape | Action |
|---|---|
| Menu | Tools → Map Local → Add |
| Association | /res.php vers le fichier mock_response.json ci-dessous |
{"status": 1, "request": "mock_token_for_testing"}
Throttle : simuler un réseau lent
Throttle reproduit une connexion dégradée pour éprouver vos timeouts :
| Réglage | Valeur |
|---|---|
| Menu | Proxy → Throttle Settings → Enable |
| Préréglage | 3G ou EDGE |
| Objectif | Tester réponses lentes et délais d'expiration |
Charles, mitmproxy ou une autre alternative ?
Charles est confortable mais payant. D'autres outils rendent le même service :
| Outil | Plateforme | HTTPS | Coût |
|---|---|---|---|
| Charles Proxy | Win/Mac/Linux | Certificat requis | Payant (essai) |
| mitmproxy | Win/Mac/Linux | Certificat requis | Gratuit |
| Fiddler | Windows | Déchiffrement intégré | Gratuit |
| Proxyman | macOS | Config en un clic | Freemium |
Configuration rapide de mitmproxy
# Install
pip install mitmproxy
# Run
mitmproxy --listen-port 8080
# Configure Python
proxies = {"https": "http://localhost:8080"}
Dépannage
| Problème | Cause | Correctif |
|---|---|---|
| Erreurs SSL dans le code | Certificat non approuvé | Installez le certificat racine ; verify=False en dev |
| Aucune requête visible | Code hors proxy | Configurez le proxy dans requests/axios |
| Réponse HTTPS illisible | Proxy SSL désactivé | Ajoutez ocr.captchaai.com au SSL Proxying |
| Requêtes ralenties | Points d'arrêt actifs | Désactivez-les si inutiles |
FAQ
Comment inspecter le trafic HTTPS chiffré de CaptchaAI ?
Installez le certificat racine de Charles, approuvez-le, puis ajoutez ocr.captchaai.com aux SSL Proxying Settings. Sans cela, le trafic reste chiffré.
Peut-on tester son intégration sans consommer de crédits ?
Oui. Utilisez Map Local pour associer /res.php à un fichier JSON simulé : votre code d'injection de token s'exécute sans mobiliser un thread.
Charles peut-il capturer des données personnelles ?
Oui, une session enregistre le trafic en clair. Par prudence RGPD, évitez les identifiants réels et supprimez ensuite les sessions.
Faut-il garder Charles en production ?
Non. Charles est un outil de développement. En production, appuyez-vous sur la journalisation structurée et la surveillance.
Déboguez et optimisez votre intégration CaptchaAI
Obtenez votre clé API sur captchaai.com et rejouez vos appels jusqu'à un trafic propre.
Guides associés
- La journalisation structurée pour les opérations CAPTCHA
- La référence des codes d'erreur CaptchaAI
- La collection Postman pour tester l'API CaptchaAI