Envía un token de reCAPTCHA con Python HTTPX
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_KEYcon la clave de API de tu espacio de trabajo ySOLVETHREE_PROXYcon la URL del proxy. Mantén la clave de API en el servidor. - Sustituye
accounts.example.com, la acciónloginy 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.
# 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.
Fuentes y referencia de la API
Ejecuta tu primera tarea.
Empieza con $5 de crédito en tu espacio de trabajo.