Tutoriales

Uso de Fiddler para inspeccionar el tráfico de la API CaptchaAI

¿La resolución falla y no sabes por qué? Coloca Fiddler entre tu código y la API de CaptchaAI y verás cada solicitud tal como viaja por la red. Fiddler funciona como un proxy local que descifra el tráfico HTTPS, así que puedes revisar el cuerpo, los encabezados y los tiempos de cada envío y cada sondeo sin tocar tu aplicación. En esta guía vas a activar la captura, filtrar solo las llamadas a CaptchaAI y aprender a leer lo que Fiddler te muestra para dar con el fallo exacto.

Es el enfoque que salva la tarde cuando, por ejemplo, gestionas la automatización de un portal de cita previa desde un servidor en otra región y los tokens vuelven vacíos de forma intermitente: los logs de tu código dicen "falló", pero solo el tráfico real revela si el problema está en el sitekey, en el proxy o en la propia respuesta de la API.

Qué revela Fiddler que tus logs no ven

Antes de instalar nada, conviene tener claro dónde aporta Fiddler más información que tus propios registros. Estos son los escenarios en los que marca la diferencia:

  • La API devuelve errores y tus logs son escasos: ves el cuerpo completo de la solicitud, los encabezados y la respuesta tal como viajaron por la red.
  • Las solicitudes de resolución parecen colgarse: confirmas si llegan al servidor o si se agota el tiempo de espera antes de recibir respuesta.
  • El token parece no válido al inyectarlo: revisas el contenido exacto del token y detectas cualquier problema de codificación.
  • Sospechas de un fallo del proxy: compruebas si las solicitudes salen realmente por el proxy que esperas.
  • Topas con el límite de solicitudes: observas los tiempos entre envíos y los patrones de respuesta 429.

Configurar Fiddler para capturar tráfico HTTPS

La puesta a punto tiene dos partes: primero activas el descifrado HTTPS en Fiddler y luego rediriges tu código hacia su proxy. Sin el primer paso solo verías tráfico cifrado; sin el segundo, Fiddler no vería nada de tu aplicación.

Paso 1: instalar Fiddler y activar el descifrado HTTPS

Fiddler actúa como un proxy local que intercepta el tráfico HTTPS. Para ver las cargas útiles de la API de CaptchaAI necesitas habilitar el descifrado HTTPS.

En Fiddler Everywhere abre Settings → HTTPS, activa "Capture HTTPS traffic" e instala el certificado raíz de Fiddler cuando te lo pida; después confía en él dentro del almacén de certificados de tu sistema operativo.

En Fiddler Classic (Windows) ve a Tools → Options → HTTPS, marca "Decrypt HTTPS traffic" y haz clic en "Actions" → "Trust Root Certificate".

Paso 2: enrutar tu código por el proxy de Fiddler

Fiddler escucha en 127.0.0.1:8866 (Fiddler Everywhere) o 127.0.0.1:8888 (Fiddler Classic).

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 con 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();

Nota: verify=False (Python) desactiva la verificación SSL para el certificado con el que Fiddler intercepta la conexión. Úsalo solo mientras depuras y elimínalo en producción.

Filtrar solo las solicitudes de CaptchaAI

En una sesión con mucho tráfico —el navegador, el sistema operativo y otras aplicaciones compiten por aparecer— la lista de Fiddler se llena de ruido. Un filtro por host te deja ver únicamente las llamadas a CaptchaAI y descartar todo lo demás.

Cada edición de Fiddler aplica el filtro a su manera.

Filtros en Fiddler Everywhere

Abre la pestaña Filters, añade una regla Hostcontainsocr.captchaai.com y aplícala.

Filtros en Fiddler Classic

Abre la pestaña Filters, marca "Use Filters" y, dentro de "Hosts", elige "Show only the following Hosts" y escribe ocr.captchaai.com.

A partir de ahí, en la lista de sesiones solo aparecen las solicitudes a la API de CaptchaAI.

Inspeccionar la solicitud y la respuesta

El flujo de resolución tiene dos llamadas: el envío de la tarea a in.php y el sondeo del resultado en res.php. Conviene revisar cada una por separado, porque los fallos se manifiestan en momentos distintos.

Solicitud de envío (in.php)

Cuando captures el envío de una tarea, revisa cuatro puntos en el panel de Fiddler:

  • Headers: el Content-Type debe ser application/x-www-form-urlencoded.
  • Cuerpo de la solicitud: confirma que key, method, googlekey/sitekey y pageurl lleguen con los valores correctos.
  • Cuerpo de la respuesta: en caso de éxito devuelve {"status":1,"request":"TASK_ID"}.
  • Código de respuesta: 200 es correcto, 403 apunta a un problema con la clave y 429 indica que has topado con el límite de solicitudes.

Solicitud de sondeo (res.php)

Al consultar el resultado, fíjate en estos tres detalles:

  • Cuerpo de la solicitud: debe incluir key, action=get, id=TASK_ID y json=1.
  • Cuerpo de la respuesta: CAPCHA_NOT_READY mientras procesa y {"status":1,"request":"TOKEN"} cuando termina.
  • Tiempos: el intervalo entre sondeos tiene que ser de 5 segundos o más.

Problemas frecuentes que se ven en Fiddler

Estas son las señales que aparecen con más frecuencia y lo que significa cada una:

  • googlekey llega vacío en el cuerpo: la extracción del sitekey falló antes de llegar aquí.
  • {"status":0,"request":"ERROR_WRONG_USER_KEY"}: la API key no es válida.
  • {"status":0,"request":"ERROR_ZERO_BALANCE"}: la cuenta no tiene saldo.
  • {"status":0,"request":"ERROR_NO_SLOT_AVAILABLE"}: el servidor está ocupado; reintenta.
  • Sin respuesta (tiempo de espera): la red o el proxy están bloqueando la conexión.
  • Código de estado 429: demasiadas solicitudes; ralentiza el sondeo.

Modificar solicitudes con breakpoints

Un breakpoint pausa la solicitud antes de enviarla y te deja modificarla al vuelo:

Configurar un breakpoint

En Fiddler Everywhere, ve a Rules → Add Rule, define la coincidencia "la URL contiene ocr.captchaai.com/in.php" y elige la acción "Pause before sending".

En Fiddler Classic, activa Rules → Automatic Breakpoints → Before Requests, o escribe bpu ocr.captchaai.com en la barra QuickExec.

Qué hacer con la solicitud en pausa

Cuando una solicitud queda en pausa:

  1. Inspecciona el cuerpo de la solicitud: verifica que todos los parámetros sean correctos
  2. Edita los parámetros: cambia method, googlekey o pageurl para probar valores distintos
  3. Reanuda: haz clic en "Run to Completion" para enviar la solicitud modificada
  4. Comprueba la respuesta: mira si tu cambio resolvió el problema

Es la forma más limpia de averiguar si el valor de un parámetro está provocando los fallos sin tocar el código.

Reenviar solicitudes fallidas

Cuando una solicitud falla, puedes reenviarla desde Fiddler sin tocar tu código. Haz clic derecho en la sesión fallida y elige ReplayReissue Requests: la misma solicitud se envía de nuevo con encabezados y cuerpo idénticos.

Si quieres reenviarla con cambios, haz clic derecho → Edit in Composer, modifica los parámetros y pulsa Execute. Así pruebas correcciones sin reiniciar tu aplicación.

Componer solicitudes de prueba desde cero

Usa el Composer de Fiddler para armar solicitudes a CaptchaAI de cero:

Envío de tarea:

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

Sondeo del resultado:

GET https://ocr.captchaai.com/res.php?key=YOUR_API_KEY&action=get&id=TASK_ID&json=1

Es más rápido que escribir código cuando solo quieres confirmar que la API responde.

Analizar los tiempos de cada solicitud

La vista Timeline de Fiddler muestra la duración de cada solicitud. Estos son los umbrales de referencia y la señal de alarma de cada tramo:

  • Resolución DNS: por debajo de 50 ms es sano; por encima de 500 ms apunta a un problema de DNS.
  • Conexión TCP: menos de 100 ms es normal; más de 1000 ms delata un problema de red.
  • Handshake TLS: menos de 200 ms es lo esperable; más de 1000 ms sugiere un problema de certificado.
  • Respuesta del servidor (in.php): por debajo de 500 ms va bien; más de 2000 ms indica congestión del servidor.
  • Respuesta del servidor (res.php): menos de 200 ms es lo normal; más de 1000 ms es inusual y conviene revisar el estado.

Exportar sesiones para el soporte

Si necesitas compartir datos de depuración con el soporte de CaptchaAI:

  1. Selecciona las sesiones relevantes en Fiddler
  2. File → Export Sessions → Selected Sessions
  3. Elige el formato HTTPArchive (.har)
  4. Elimina tu API key del archivo exportado antes de compartirlo
Find and replace your actual API key with "REDACTED" in the .har file

Solución de problemas

Cuando Fiddler no se comporta como esperas, casi siempre es uno de estos cinco casos:

  • No muestra nada de tráfico: tu código no sale por el proxy de Fiddler. Configúralo en 127.0.0.1:8866 (Everywhere) o 8888 (Classic).
  • Errores de certificado SSL: el certificado raíz de Fiddler no es de confianza. Reinstálalo y añádelo a las raíces de confianza del sistema.
  • El cuerpo de respuesta es ilegible: la respuesta viene comprimida. Activa el botón "Decode" de la barra o usa Rules → Remove All Encodings.
  • Los breakpoints no se disparan: el filtro o la regla no coinciden. Verifica que el patrón de URL sea exactamente ocr.captchaai.com.
  • Aparece tráfico pero el cuerpo está vacío: hay un desajuste de Content-Length o una respuesta en streaming. Haz clic en la sesión y espera a que cargue por completo.

Preguntas frecuentes

Estas son las dudas que más surgen al usar Fiddler para depurar la integración con CaptchaAI.

¿Necesito Fiddler si ya registro las solicitudes en mi código?

Depende. Los logs propios te dicen lo que tu código cree que envió; Fiddler te muestra lo que salió de verdad por la red, encabezados y descifrado HTTPS incluidos. Cuando el sitekey llega vacío o el proxy reescribe algo, esa diferencia solo se ve interceptando el tráfico real.

¿Es seguro desactivar la verificación SSL solo para depurar?

Sí, mientras sea temporal y local. verify=False (o su equivalente) permite que tu código acepte el certificado con el que Fiddler intercepta la conexión. Quítalo en cuanto termines: dejarlo en producción abre la puerta a ataques de intermediario reales.

¿Cómo evito filtrar mi API key al compartir una sesión con el soporte?

Antes de enviar el archivo .har, busca y reemplaza tu clave por un marcador como REDACTED. La API key viaja en el cuerpo de cada solicitud, así que aparece en texto plano dentro de la exportación; limpiarla es un paso obligatorio, no opcional.

¿Fiddler Everywhere o Fiddler Classic para trabajar con la API de CaptchaAI?

Fiddler Everywhere es multiplataforma (Windows, macOS, Linux) y tiene una interfaz moderna. Fiddler Classic es solo para Windows, pero ofrece scripting más avanzado con FiddlerScript. Para depurar la integración con CaptchaAI, cualquiera de los dos te sirve.

Artículos relacionados

Próximos pasos

Unos mensajes de error claros en la API agilizan la depuración. Empieza con CaptchaAI y recurre a Fiddler cuando necesites una inspección más profunda a nivel de solicitud.

Guías relacionadas:

Los comentarios están deshabilitados para este artículo.