Ein reCAPTCHA-Token mit Python HTTPX übermitteln

Von solvethree3 Min. Lesezeit

Verwenden Sie beim POST an die Zielseite solution.token, den beim Lösen erfolgreichen Proxy und die zurückgegebene Browseridentität. Behalten Sie die Cookies der Anwendung in einem einzigen HTTPX-Client; ein gültiges Token ersetzt weder die Sitzungs- noch die CSRF-Anforderungen der Anwendung.

Auf dieser Seite

Fertiges Token über den erfolgreichen Proxy senden

Installieren Sie HTTPX mit pip install httpx. Das Beispiel verwendet außerdem das offizielle Python-SDK; falls es noch nicht installiert ist, siehe Einrichtung des Python-SDKs.

Das Beispiel enthält den Lösungsaufruf, um zu zeigen, woher das Ergebnis stammt. Wenn Sie bereits ein SDK-Ergebnis mit dem Status ready haben, verwenden Sie es als result zusammen mit der ursprünglichen request weiter. Erstellen Sie keine weitere Aufgabe, nur um deren Token zu übermitteln.

  • Setzen Sie SOLVETHREE_API_KEY auf Ihren Workspace-API-Schlüssel und SOLVETHREE_PROXY auf die Proxy-URL. Bewahren Sie den API-Schlüssel auf dem Server auf.
  • Ersetzen Sie accounts.example.com, die Aktion login und die Übermittlungs-URL durch die Werte Ihrer vorgesehenen Zielseite. Für den Hostnamen muss ein aktives Websiteprofil in Ihrem Workspace vorhanden sein; siehe Einrichtung eines Websiteprofils.
  • Passen Sie die Formularfelder an die tatsächliche Anfrage der Anwendung an. Das Beispiel sendet nur das CAPTCHA-Feld, kein vollständiges Anmeldeformular.
HTTPX · Proxy und zurückgegebene Browseridentität wiederverwenden
# 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) wählt den Proxy aus, der für die Übermittlung weiterverwendet wird. Behalten Sie die Prüfung bei, die die Übermittlung stoppt, wenn kein gültiger Proxy zurückgegeben wird. Verwenden Sie den aktuellen HTTPX-Parameter im Singular proxy=, nicht proxies=. Die Einstellung trust_env=False verhindert, dass Proxy-Einstellungen aus der Umgebung die explizit gewählte Route ändern.

Cookies, Browseridentität und Formularfelder zusammenhalten

Wenn die Anwendung eine anfängliche Seitenanfrage benötigt, um eine Sitzung aufzubauen oder einen CSRF-Wert abzurufen, führen Sie diese Anfrage vor dem POST im selben HTTPX-Client aus. Dessen Cookie-Speicher behält Cookies über mehrere Anfragen hinweg bei. Ein separater Client verfügt nicht automatisch über diese Sitzung.

Verwenden Sie auch für diese vorbereitenden Anfragen die zurückgegebenen Werte userAgent und secChUa, keine andere Browseridentität. Das Beispiel übergibt sie beim POST als User-Agent und sec-ch-ua. Behalten Sie diese Header und den erfolgreichen Proxy bei, wenn Sie die Lösung an die vorgesehene Zielseite übermitteln.

data= sendet Formulardaten. Hier erhält g-recaptcha-response den Wert von solution.token; es darf weder die Aufgaben-ID noch das gesamte Lösungs-Dictionary erhalten. Stimmen Sie den Feldnamen auf die tatsächliche Anfrage der Zielseite ab und übermitteln Sie alle erforderlichen Zugangsdaten, versteckten Felder und den CSRF-Wert in derselben Anfrage.

Weiterleitungen prüfen, bevor Sie die Übermittlung als erfolgreich betrachten

Mit follow_redirects=False bleibt die erste Antwort der Anwendung sichtbar. Falls sie weiterleitet, prüfen Sie Status und Ziel, bevor Sie den erwarteten nächsten Schritt der Anwendung mit demselben Client explizit ausführen. Senden Sie das Token nicht automatisch erneut an eine andere URL.

Der ausgegebene HTTP-Status ist nur ein Ausgangspunkt. Prüfen Sie den Antwortinhalt, das Weiterleitungsziel oder den resultierenden Anwendungszustand, um festzustellen, ob die Zielseite die Anfrage akzeptiert hat. Eine 200-Antwort oder eine Weiterleitung kann sowohl Erfolg als auch einen Fehlerablauf darstellen; der solvethree-Status ready bedeutet, dass eine Lösung erzeugt wurde, nicht dass die Zielseite sie akzeptiert hat.

Führe deinen ersten Task aus.

Starte mit $5 Workspace-Guthaben.

Workspace erstellen
Ein reCAPTCHA-Token mit Python HTTPX übermitteln · solvethree