Prueba la API de CAPTCHA con HTTPie

Por solvethree4 min de lectura

Usa HTTPie para crear una tarea, guardar su ID y después recuperar esa misma tarea. Registra un requestId antes del POST para que un tiempo de espera de conexión agotado no te obligue a crear otra tarea lógica.

En esta página

Prepara la solicitud

  • Instala HTTPie y jq, y ejecuta el ejemplo en Bash. Estos comandos usan el ejecutable http de HTTPie, no curl ni un alias de shell para curl.
  • Define la variable de entorno SOLVETHREE_API_KEY con la clave de API de tu espacio de trabajo. Ejecútalo en un equipo de confianza; no incluyas la clave en código del navegador.
  • Configura en la consola un perfil activo para el nombre de host de destino. Enviar un nombre de host y una acción no crea un perfil. Consulta la configuración del perfil del sitio.
  • Sustituye el nombre de host, la acción y la URL del proxy del ejemplo. Usa una URL de proxy HTTP o HTTPS sin ruta, parámetros de consulta ni fragmento.
  • Sustituye el marcador de posición requestId por un ID único para esta tarea lógica: de 1–64 caracteres ASCII entre letras, números, guiones bajos o guiones. Guárdalo antes de enviar la solicitud.

La solicitud es para reCAPTCHA Enterprise: recaptchaType tiene el valor predeterminado enterprise-v3. Necesita site, action y exactamente uno de los campos proxy o proxyCandidates; este ejemplo usa un proxy. No añadas los campos type ni url.

Crea la tarea y guarda su ID

HTTPie · crear una tarea y recuperarla
set -eu
umask 077
# Install HTTPie and jq. Keep the same request.json for recovery.
cat > request.json <<'JSON'
{
  "site": "accounts.example.com",
  "action": "login",
  "proxy": "http://USER:PASSWORD@PROXY:PORT",
  "requestId": "replace-with-one-unique-logical-task-id"
}
JSON
# This file contains proxy credentials; keep it private.
http --check-status --timeout=30 POST https://api.solvethree.com/v1/tasks \
  Authorization:"Bearer $SOLVETHREE_API_KEY" waitMs==0 < request.json > task.json
TASK_ID=$(jq -r '.id' task.json)
http --check-status --timeout=30 GET "https://api.solvethree.com/v1/tasks/$TASK_ID" \
  Authorization:"Bearer $SOLVETHREE_API_KEY" waitMs==15000
# pending/solving: retrieve the same ID again, within a finite deadline.
# ready: use solution. failed: stop and inspect errorCode/error.
# A timed-out POST is recovered with the unchanged file and requestId.

Las cadenas JSON entre comillas se guardan en request.json, que HTTPie lee desde la entrada estándar. La cabecera Authorization envía tu clave mediante autenticación Bearer. Mantén request.json privado porque contiene credenciales del proxy.

waitMs==0 y waitMs==15000 son parámetros de consulta de HTTPie, no campos del cuerpo JSON. El POST no solicita espera; el GET usa una espera de 15,000 ms. La opción independiente --timeout=30 de HTTPie establece un tiempo de espera del cliente de 30 segundos.

La respuesta del POST se guarda en task.json y jq extrae su id para el GET. Ejecuta los comandos en orden. set -eu detiene el script si HTTPie informa de un fallo, antes de que se pueda usar una respuesta incompleta para recuperar la tarea.

Una respuesta HTTP satisfactoria no significa que la tarea esté lista

--check-status detecta las respuestas HTTP no satisfactorias. Gestiónalas antes de tratar el cuerpo como una respuesta de tarea satisfactoria. Una solicitud HTTP satisfactoria puede devolver una tarea sin terminar o fallida; a continuación, lee el campo status del JSON.

Qué hacer según el estado de la tarea
Qué hacer según el estado de la tarea
EstadoSiguiente acción
pending o solvingVuelve a consultar el mismo ID de tarea dentro de un plazo finito que tú elijas. No crees otra tarea solo porque esta aún no esté lista.
listoUsa la solución devuelta. Este es el único estado con una solución utilizable.
failedDeja de consultar y revisa errorCode y error. Las resoluciones fallidas se reembolsan; no reintentes a ciegas con los mismos datos de entrada no válidos.

El ejemplo realiza una sola consulta, no un bucle de consultas. Cuando envíes una solución lista a su destino previsto, usa los valores userAgent y secChUa devueltos con el proxy que funcionó. Que esté lista significa que solvethree ha generado una solución, no que la solicitud de tu aplicación haya tenido éxito.

Recupera un POST cuyo tiempo de espera se haya agotado

Que se agote el tiempo de espera del cliente no demuestra que la creación de la tarea haya fallado. Si ya tienes el ID de la tarea, recupérala. Si se agotó el tiempo de espera del POST antes de que recibieras un ID, vuelve a ejecutar el POST con request.json sin modificar, incluido su requestId original. El mismo ID y los mismos datos de entrada de la tarea devuelven la tarea existente.

No extraigas un ID de un task.json vacío o incompleto; recupera primero el POST. No cambies el proxy, la acción ni otros datos de entrada de la tarea al reutilizar ese requestId: unos datos diferentes provocan un conflicto. Usa un requestId nuevo solo cuando quieras crear una nueva tarea lógica.

Ejecuta tu primera tarea.

Empieza con $5 de crédito en tu espacio de trabajo.

Crear un espacio de trabajo
Prueba la API de CAPTCHA con HTTPie · solvethree