Envía un token de reCAPTCHA con Python HTTPX

Por solvethree3 min de lectura

Utiliza solution.token, el proxy con el que se completó la resolución y la identidad de navegador devuelta al enviar una solicitud POST al destino. Mantén las cookies de la aplicación en un único cliente HTTPX; un token válido no sustituye sus requisitos de sesión ni de CSRF.

En esta página

Envía el token listo a través del proxy con el que se completó la resolución

Instala HTTPX con pip install httpx. El ejemplo también utiliza el SDK oficial de Python; consulta la configuración del SDK de Python si no está instalado.

El ejemplo incluye la llamada de resolución para mostrar de dónde procede el resultado. Si ya tienes un resultado del SDK en estado ready, reutilízalo como result junto con el request original. No crees otra tarea solo para enviar su token.

  • Establece SOLVETHREE_API_KEY con la clave de API de tu espacio de trabajo y SOLVETHREE_PROXY con la URL del proxy. Mantén la clave de API en el servidor.
  • Sustituye accounts.example.com, la acción login y la URL de envío por los valores del destino previsto. El nombre de host necesita un perfil de sitio activo en tu espacio de trabajo; consulta la configuración del perfil del sitio.
  • Adapta los campos del formulario a la solicitud real de la aplicación. El ejemplo solo envía el campo CAPTCHA, no un formulario de inicio de sesión completo.
HTTPX · reutilizar el proxy y la identidad de navegador devuelta
# pip install httpx and the official solvethree SDK wheel.
import os
import httpx
from solvethree import Solvethree, successful_proxy

request = {"site": "accounts.example.com", "action": "login", "proxy": os.environ["SOLVETHREE_PROXY"]}
result = Solvethree(os.environ["SOLVETHREE_API_KEY"]).solve(request, timeout=180)
solution = result["solution"]
proxy = successful_proxy(request, result)
if proxy is None:
    raise RuntimeError("No valid successful proxy")
with httpx.Client(proxy=proxy, timeout=30, follow_redirects=False, trust_env=False) as target:
    # Use this client's cookie jar for any required application session first.
    response = target.post("https://accounts.example.com/login",
        data={"g-recaptcha-response": solution["token"]},
        headers={"User-Agent": solution["userAgent"], "sec-ch-ua": solution["secChUa"]})
    print("Application HTTP status:", response.status_code)
    # Check the application's actual response and required CSRF/session fields.

successful_proxy(request, result) selecciona el proxy que se reutilizará para el envío. Conserva la comprobación que detiene el envío si no devuelve un proxy válido. Utiliza el parámetro actual de HTTPX en singular, proxy=, no proxies=. Establecer trust_env=False impide que la configuración de proxy del entorno cambie la ruta seleccionada explícitamente.

Mantén juntos las cookies, la identidad del navegador y los campos del formulario

Si la aplicación requiere una solicitud inicial de página para establecer una sesión u obtener un valor CSRF, realiza esa solicitud dentro del mismo cliente HTTPX antes del POST. Su almacén de cookies conserva las cookies entre solicitudes. Un cliente independiente no tendrá esa sesión automáticamente.

Utiliza también los valores devueltos de userAgent y secChUa para esas solicitudes preliminares, no una identidad de navegador distinta. El ejemplo los incluye en el POST como User-Agent y sec-ch-ua. Mantén esas cabeceras y el proxy con el que se completó la resolución al enviar la solución al destino previsto.

data= envía datos de formulario. Aquí, g-recaptcha-response recibe solution.token; no debe recibir el ID de la tarea ni el diccionario completo de la solución. Ajusta el nombre del campo a la solicitud real del destino e incluye en ese mismo envío las credenciales, los campos ocultos y el valor CSRF necesarios.

Revisa las redirecciones antes de dar el envío por correcto

follow_redirects=False deja visible la primera respuesta de la aplicación. Si hay una redirección, revisa su estado y destino antes de seguir explícitamente el siguiente paso previsto por la aplicación con el mismo cliente. No reenvíes automáticamente el token a una URL distinta.

El estado HTTP mostrado es solo un punto de partida. Comprueba el cuerpo de la respuesta, el destino de la redirección o el estado resultante de la aplicación para determinar si el destino aceptó la solicitud. Una respuesta 200 o una redirección pueden representar tanto un éxito como un flujo de error; el estado ready de solvethree significa que se generó una solución, no que el destino la haya aceptado.

Ejecuta tu primera tarea.

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

Crear un espacio de trabajo
Envía un token de reCAPTCHA con Python HTTPX · solvethree