Usa solvethree en una vista de Django
Crea la tarea en una vista POST, devuelve su ID y permite que quien la llama consulte su estado. No mantengas abierta la solicitud de creación hasta que termine la resolución.
Las vistas proporcionadas utilizan un destino reCAPTCHA Enterprise configurado y un único proxy. Están pensadas para un proyecto Django existente con autenticación y el middleware CSRF estándar habilitados.
En esta página
Instala el SDK y configura el destino
- 1.
Instala en el entorno de Django
El SDK oficial requiere Python 3.10+. En el entorno donde se ejecuta Django, usa
python -m pip install https://solvethree.com/downloads/solvethree_sdk-0.1.0-py3-none-any.whl. - 2.
Establece las variables de entorno del servidor
Establece
SOLVETHREE_API_KEYcon la clave de API de tu espacio de trabajo,CAPTCHA_SITEcon el nombre de host del destino, no una URL completa, ySOLVETHREE_PROXYcon el proxy utilizado para la resolución y el posterior envío al destino. Mantén la clave de API y las credenciales del proxy en el servidor. - 3.
Activa el perfil del sitio
Configura en la consola un perfil activo para ese nombre de host, disponible para tu espacio de trabajo. Enviar un nombre de host y una acción no crea un perfil. Consulta la configuración del perfil del sitio.
El ejemplo fija la acción en login y no acepta ajustes del destino de quien lo llama. Cambia esa acción si tu destino configurado requiere otra. La solicitud usa el modo predeterminado enterprise-v3; necesita site, action y exactamente uno de proxy o proxyCandidates, no type ni url.
Añade las vistas autenticadas
# views.py in an existing Django project with authentication/CSRF configured.
import os
from django.contrib.auth.decorators import login_required
from django.http import JsonResponse
from django.views.decorators.http import require_GET, require_POST
from solvethree import Solvethree, SolvethreeError
def client():
return Solvethree(os.environ["SOLVETHREE_API_KEY"])
@login_required
@require_POST
def create_captcha(request):
task = {"site": os.environ["CAPTCHA_SITE"], "action": "login", "proxy": os.environ["SOLVETHREE_PROXY"]}
if request.headers.get("X-Request-ID"):
task["requestId"] = request.headers["X-Request-ID"]
try:
return JsonResponse(client().create_task(task, wait_ms=0, timeout=20))
except ValueError:
return JsonResponse({"error": "Invalid task input"}, status=400)
except SolvethreeError as error:
return JsonResponse({"requestId": error.request_id, "taskId": error.task_id}, status=502)
@login_required
@require_GET
def get_captcha(request, task_id):
try:
return JsonResponse(client().get_task(task_id, wait_ms=15000, timeout=25))
except ValueError:
return JsonResponse({"error": "Invalid task ID"}, status=400)
except SolvethreeError as error:
return JsonResponse({"requestId": error.request_id, "taskId": error.task_id}, status=502)
# urls.py: import these views and add to urlpatterns:
# path("captcha/tasks", create_captcha),
# path("captcha/tasks/<str:task_id>", get_captcha),create_task usa wait_ms=0, por lo que devuelve la tarea sin esperar a que termine toda la resolución. Su llamada HTTP tiene un tiempo de espera de 20 segundos. La vista de recuperación puede esperar hasta 15 segundos a que se actualice una tarea, con un tiempo de espera HTTP de 25 segundos. Son llamadas síncronas al SDK: la solicitud de recuperación sigue ocupando su proceso de trabajo de Django mientras espera.
login_required restringe el acceso a los usuarios que han iniciado sesión; los decoradores de método permiten POST para la creación y GET para la recuperación. Mantén la protección CSRF habitual de Django e incluye su token CSRF al enviar un POST. No añadas csrf_exempt.
Conecta las rutas e inicia Django
- 1.
Actualiza el URLconf existente
Importa
pathdesdedjango.urlse importacreate_captchayget_captchadesde el módulo de vistas de tu aplicación. Añade las dos entradas de ruta que se muestran al final del ejemplo a losurlpatternsexistentes. Si utilizas un URLconf de aplicación, asegúrate de que el URLconf del proyecto lo incluya. - 2.
Inicia el servidor de desarrollo
Con las variables de entorno disponibles para el proceso, ejecuta
python manage.py runserverdesde el directorio que contienemanage.py. Utiliza el flujo de inicio de sesión existente de tu proyecto antes de llamar a los endpoints. - 3.
Utiliza las rutas registradas
Sin un prefijo de URL que las englobe, la creación es POST
/captcha/tasksy la recuperación es GET/captcha/tasks/<task_id>. Las rutas proporcionadas no tienen barra final. Incluye cualquier prefijo introducido por el URLconf de tu proyecto.
Crea una sola vez y después recupera la tarea
- 1.
Guarda un ID antes de enviar el POST
Elige un
X-Request-IDnuevo para cada tarea lógica y consérvalo hasta que se resuelva la creación. Usa entre 1 y 64 letras ASCII, números, guiones bajos o guiones. La vista reenvía esta cabecera como elrequestIdde la tarea. - 2.
Comprueba el éxito HTTP antes del estado de la tarea
El ejemplo devuelve HTTP 400 para los errores de validación de entrada capturados y 502 para los errores del SDK capturados. Una respuesta correcta contiene los datos de la tarea; lee su
idy sustatus. El éxito HTTP significa que la solicitud se ha completado correctamente, no que haya un token listo. - 3.
Consulta la tarea hasta que termine
Llama al endpoint GET con el ID de tarea devuelto. Continúa si está en
pendingosolving. Cuando esté enready, utiliza la solución. Si está enfailed, deja de consultar y revisaerrorCodeyerror; las resoluciones fallidas se reembolsan. Corrige los datos de entrada no válidos en lugar de reintentarlo sin cambiarlos. - 4.
Recupera una creación de resultado incierto
Si el POST agota el tiempo de espera o devuelve un error del SDK, no crees inmediatamente otra tarea con un ID nuevo. Recupera la tarea existente si conoces su ID. De lo contrario, repite el POST con el
X-Request-IDoriginal y sin cambiar los datos de entrada de la tarea para recuperarla. Reutilizar ese ID con datos de entrada diferentes genera un conflicto, incluidos los cambios en el nombre de host, la acción o el proxy configurados.
La respuesta de error del SDK incluye requestId y taskId de la excepción para el diagnóstico. Conserva por separado el X-Request-ID original de quien realiza la llamada para que la recuperación no dependa de recibir esa respuesta. Consulta Errores de la API de CAPTCHA para gestionar los fallos.
Envía el token con el mismo proxy y la identidad devuelta
Solo una tarea ready contiene una solución utilizable. El valor que debes enviar al destino previsto es solution.token, no el ID de tarea. Utiliza la identidad de navegador devuelta en solution.userAgent y solution.secChUa, junto con el proxy original configurado en SOLVETHREE_PROXY.
Estas vistas no envían nada al destino. Tu código de envío debe conservar ese proxy y aplicar la identidad devuelta; devolver el token a una sesión de navegador ajena no lo hace automáticamente. Mantén las credenciales del proxy en el servidor y no mezcles la solución con otra URL de destino ni con otra identidad de navegador.
Fuentes y referencia de la API
Ejecuta tu primera tarea.
Empieza con $5 de crédito en tu espacio de trabajo.