solvethree in einer Django-View verwenden
Erstellen Sie die Aufgabe in einer POST-View, geben Sie ihre ID zurück und lassen Sie den Aufrufer ihren Status abrufen. Halten Sie die Erstellungsanfrage nicht offen, bis der Lösungsversuch abgeschlossen ist.
Die bereitgestellten Views verwenden ein konfiguriertes reCAPTCHA Enterprise-Ziel und einen einzelnen Proxy. Sie sind für ein bestehendes Django-Projekt mit aktivierter Authentifizierung und standardmäßiger CSRF-Middleware vorgesehen.
Auf dieser Seite
SDK installieren und Ziel konfigurieren
- 1.
In der Django-Umgebung installieren
Das offizielle SDK benötigt Python 3.10+. Führen Sie in der Umgebung, in der Django läuft,
python -m pip install https://solvethree.com/downloads/solvethree_sdk-0.1.0-py3-none-any.whlaus. - 2.
Server-Umgebungsvariablen setzen
Setzen Sie
SOLVETHREE_API_KEYauf den API-Schlüssel Ihres Workspace,CAPTCHA_SITEauf den Zielhostname – nicht auf eine vollständige URL – undSOLVETHREE_PROXYauf den Proxy, der zum Lösen und für die anschließende Übermittlung an das Ziel verwendet wird. Bewahren Sie den API-Schlüssel und die Proxy-Zugangsdaten auf dem Server auf. - 3.
Profil der Website aktivieren
Konfigurieren Sie in der Konsole ein aktives Profil für diesen Hostnamen, das Ihrem Workspace zur Verfügung steht. Das Senden eines Hostnamens und einer Aktion erstellt kein Profil. Siehe Website-Profil einrichten.
Das Beispiel legt die Aktion auf login fest und übernimmt keine Zieleinstellungen vom Aufrufer. Ändern Sie diese Aktion, wenn Ihr konfiguriertes Ziel eine andere erfordert. Die Anfrage verwendet den Standardmodus enterprise-v3; sie benötigt site, action und genau eines von proxy oder proxyCandidates, nicht type oder url.
Authentifizierte Views hinzufügen
# 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 verwendet wait_ms=0 und gibt die Aufgabe daher zurück, ohne auf den gesamten Lösungsversuch zu warten. Der HTTP-Aufruf hat einen Timeout von 20 Sekunden. Die Abruf-View kann bis zu 15 Sekunden auf eine Aufgabenaktualisierung warten, bei einem HTTP-Timeout von 25 Sekunden. Dies sind synchrone SDK-Aufrufe: Die Abrufanfrage belegt während des Wartens weiterhin ihren Django-Worker.
login_required beschränkt den Zugriff auf angemeldete Nutzer; die Methoden-Dekoratoren erlauben POST zum Erstellen und GET zum Abrufen. Behalten Sie den normalen CSRF-Schutz von Django bei und senden Sie dessen CSRF-Token bei POST-Anfragen mit. Fügen Sie kein csrf_exempt hinzu.
Routen einbinden und Django starten
- 1.
Bestehende URLconf aktualisieren
Importieren Sie
pathausdjango.urlssowiecreate_captchaundget_captchaaus dem Views-Modul Ihrer App. Fügen Sie die beiden Routeneinträge am Ende des Beispiels zu den bestehendenurlpatternshinzu. Wenn Sie eine App-URLconf verwenden, stellen Sie sicher, dass die Projekt-URLconf sie einbindet. - 2.
Entwicklungsserver starten
Stellen Sie sicher, dass die Umgebungsvariablen für den Prozess verfügbar sind, und führen Sie
python manage.py runserverim Verzeichnis mitmanage.pyaus. Nutzen Sie den bestehenden Anmeldeablauf Ihres Projekts, bevor Sie die Endpunkte aufrufen. - 3.
Registrierte Pfade verwenden
Ohne übergeordnetes URL-Präfix erfolgt die Erstellung über POST
/captcha/tasksund der Abruf über GET/captcha/tasks/<task_id>. Die bereitgestellten Routen haben keinen abschließenden Schrägstrich. Berücksichtigen Sie alle Präfixe aus Ihrer Projekt-URLconf.
Einmal erstellen, dann die Aufgabe abrufen
- 1.
ID vor dem Senden der POST-Anfrage speichern
Wählen Sie für jede logische Aufgabe eine neue
X-Request-IDund bewahren Sie sie auf, bis die Erstellung geklärt ist. Verwenden Sie 1–64 ASCII-Buchstaben, Ziffern, Unterstriche oder Bindestriche. Die View leitet diesen Header alsrequestIdder Aufgabe weiter. - 2.
HTTP-Erfolg vor dem Aufgabenstatus prüfen
Das Beispiel gibt bei abgefangenen Eingabevalidierungsfehlern HTTP 400 und bei abgefangenen SDK-Fehlern 502 zurück. Eine erfolgreiche Antwort enthält die Aufgaben-Payload; lesen Sie deren
idundstatusaus. HTTP-Erfolg bedeutet, dass die Anfrage erfolgreich war, nicht dass ein Token bereitsteht. - 3.
Aufgabe bis zum Abschluss abrufen
Rufen Sie den GET-Endpunkt mit der zurückgegebenen Aufgaben-ID auf. Fahren Sie bei
pendingodersolvingfort. Verwenden Sie beireadydie Lösung. Beenden Sie beifaileddas Polling und prüfen SieerrorCodeunderror; fehlgeschlagene Lösungsversuche werden erstattet. Korrigieren Sie ungültige Eingaben, statt sie unverändert erneut zu senden. - 4.
Aufgabe bei unklarer Erstellung wiederfinden
Wenn die POST-Anfrage einen Timeout hat oder einen SDK-Fehler zurückgibt, erstellen Sie nicht sofort eine weitere Aufgabe mit einer neuen ID. Rufen Sie die bestehende Aufgabe ab, wenn ihre ID bekannt ist. Andernfalls wiederholen Sie die POST-Anfrage mit der ursprünglichen
X-Request-IDund unveränderten Aufgabeneingaben, um sie wiederzufinden. Die Wiederverwendung dieser ID mit anderen Eingaben führt zu einem Konflikt – auch bei Änderungen am konfigurierten Hostnamen, an der Aktion oder am Proxy.
Die SDK-Fehlerantwort enthält zur Diagnose requestId und taskId aus der Ausnahme. Bewahren Sie die ursprüngliche X-Request-ID des Aufrufers separat auf, damit die Wiederherstellung nicht vom Empfang dieser Antwort abhängt. Hinweise zur Fehlerbehandlung finden Sie unter CAPTCHA-API-Fehler.
Token mit demselben Proxy und der zurückgegebenen Identität übermitteln
Nur eine ready-Aufgabe enthält eine verwendbare Lösung. An das vorgesehene Ziel muss solution.token gesendet werden, nicht die Aufgaben-ID. Verwenden Sie die zurückgegebene Browseridentität aus solution.userAgent und solution.secChUa zusammen mit dem ursprünglich in SOLVETHREE_PROXY konfigurierten Proxy.
Diese Views senden nichts an das Ziel. Ihr Übermittlungscode muss diesen Proxy beibehalten und die zurückgegebene Identität anwenden; die Rückgabe des Tokens an eine andere Browsersitzung erledigt das nicht automatisch. Bewahren Sie Proxy-Zugangsdaten serverseitig auf und kombinieren Sie die Lösung nicht mit einer anderen Ziel-URL oder Browseridentität.
Quellen und API-Referenz
Führe deinen ersten Task aus.
Starte mit $5 Workspace-Guthaben.