Explainers

GeeTest v3 Challenge-Response-Workflow: Technischer Deep Dive

GeeTest v3 verwendet ein mehrstufiges Challenge-Response-Protokoll. Im Gegensatz zu reCAPTCHA, bei dem ein einziger Token alles löst, umfasst GeeTest einen Registrierungsschritt, einen Challenge-Token-Austausch und eine abschließende Validierung – wobei jeder Schritt unterschiedliche Parameter erzeugt. Das Verständnis dieses Ablaufs ist für die korrekte Integration mit CaptchaAI unerlässlich.

Das Zwei-Phasen-Protokoll

GeeTest v3 arbeitet in zwei Phasen:

Phase 1: Registrierung (serverseitig)

Das Backend der Website kontaktiert GeeTest, um eine neue Herausforderung zu registrieren:

Site Backend → GeeTest Server: "Give me a challenge for this user"
GeeTest Server → Site Backend: { gt, challenge, new_captcha }
Site Backend → Browser: Passes gt and challenge to the page

Phase 2: Verifizierung (Client-Seite + Server-Seite)

Der Browser rendert die Herausforderung, der Benutzer löst sie und das Ergebnis wird überprüft:

Browser: Renders slider/puzzle using gt + challenge
User: Solves the challenge
Browser → Site Backend: { geetest_challenge, geetest_validate, geetest_seccode }
Site Backend → GeeTest Server: Verifies the three values
GeeTest Server → Site Backend: { result: "success" }

Detaillierter Ablauf

Schritt 1: Registrierungs-API-Aufruf

Das Backend der Site ruft den Registrierungsendpunkt von GeeTest auf:

GET https://api.geetest.com/register.php?gt=GT_ID&json_format=1

Antwort:

{
  "success": 1,
  "gt": "81dc9bdb52d04dc20036dbd8313ed055",
  "challenge": "a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6",
  "new_captcha": true
}
Parameter Bedeutung
gt GeeTest-ID – identifiziert das GeeTest-Konto der Site
challenge Einzigartiger Challenge-Token für diese Sitzung
new_captcha Ob das neue CAPTCHA-Format verwendet werden soll

Wichtig: Der challenge-Wert ist einmalig und zeitlich begrenzt. Jeder Seitenaufruf erzeugt eine neue Herausforderung.

Schritt 2: Challenge-Rendering

Der Browser empfängt gt und challenge und initialisiert das GeeTest-Widget:

initGeetest({
  gt: "81dc9bdb52d04dc20036dbd8313ed055",
  challenge: "a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6",
  offline: false,
  new_captcha: true,
  product: "float"
}, function(captchaObj) {
  captchaObj.appendTo('#captcha-container');
  captchaObj.onSuccess(function() {
    var result = captchaObj.getValidate();
    // result contains: geetest_challenge, geetest_validate, geetest_seccode
  });
});

Schritt 3: Herausforderungstypen

GeeTest v3 unterstützt mehrere Herausforderungstypen:

Typ Benutzeraktion Beschreibung
Schieberegler Puzzleteil ziehen Verschieben Sie ein Puzzleteil, um das Bild zu vervollständigen
Symbolklick Klicken Sie der Reihe nach auf die Symbole Klicken Sie in der angezeigten Reihenfolge auf bestimmte Symbole
Wortklick Klicken Sie auf Zeichen Klicken Sie auf chinesische Zeichen in der richtigen Reihenfolge
Leerzeichen Klicken Sie auf/select Herausforderung zum räumlichen Denken

Der Herausforderungstyp wird von GeeTest basierend auf der Konfiguration der Site und dem Benutzerrisikoprofil bestimmt.

Schritt 4: Lösungswerte

Nach der Lösung erzeugt das Widget drei Werte:

{
  "geetest_challenge": "a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6xy",
  "geetest_validate": "abc123def456_validate",
  "geetest_seccode": "abc123def456_validate|jordan"
}
Wert Beschreibung
geetest_challenge Modifizierter Challenge-Token (Original + 2 zusätzliche Zeichen)
geetest_validate Validierungs-Hash
geetest_seccode Sicherheitscode (validieren + `\

Schritt 5: Serverseitige Überprüfung

Das Site-Backend sendet diese drei Werte zur Überprüfung an GeeTest:

POST https://api.geetest.com/validate.php

seccode=abc123def456_validate|jordan
&challenge=a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6xy
&sdk=geetest-python-3.0.0

GeeTest antwortet mit:

{
  "seccode": "abc123def456_validate",
  "validate": "abc123def456_validate"
}

Extrahieren von Parametern für CaptchaAI

Zum Lösen mit CaptchaAI benötigen Sie gt und challenge von der Seite:

Methode 1: Registrierungsantwort abfangen

from playwright.sync_api import sync_playwright
import json

with sync_playwright() as p:
    browser = p.chromium.launch()
    page = browser.new_page()

    geetest_params = {}

    def handle_response(response):
        if "register" in response.url and "geetest" in response.url:
            data = response.json()
            geetest_params["gt"] = data.get("gt")
            geetest_params["challenge"] = data.get("challenge")

    page.on("response", handle_response)
    page.goto("https://example.com/login")

    # Wait for GeeTest to load
    page.wait_for_selector(".geetest_holder")
    print(f"gt: {geetest_params.get('gt')}")
    print(f"challenge: {geetest_params.get('challenge')}")

Methode 2: Aus Seiten-JavaScript extrahieren

gt = page.evaluate("() => document.querySelector('[data-gt]')?.dataset.gt")
challenge = page.evaluate("() => document.querySelector('[data-challenge]')?.dataset.challenge")

Methode 3: Vom initGeetest-Aufruf

Durchsuchen Sie die Seitenquelle nach dem initGeetest-Aufruf:

import re
source = page.content()
gt_match = re.search(r"gt['\"]?\s*[:=]\s*['\"]([a-f0-9]{32})['\"]", source)
challenge_match = re.search(r"challenge['\"]?\s*[:=]\s*['\"]([a-f0-9]{32})['\"]", source)

Lösung mit CaptchaAI

Senden Sie die extrahierten Parameter:

POST https://ocr.captchaai.com/in.php

key=YOUR_API_KEY
&method=geetest
&gt=81dc9bdb52d04dc20036dbd8313ed055
&challenge=a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6
&pageurl=https://example.com/login
&json=1

Umfrage zum Ergebnis:

GET https://ocr.captchaai.com/res.php?key=YOUR_API_KEY&action=get&id=TASK_ID&json=1

CaptchaAI gibt Folgendes zurück:

{
  "status": 1,
  "request": {
    "geetest_challenge": "a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6xy",
    "geetest_validate": "abc123def456_validate",
    "geetest_seccode": "abc123def456_validate|jordan"
  }
}

Sie erhalten alle drei Werte, die für den Verifizierungsschritt der Site erforderlich sind.

Offline- vs. Online-Modus

GeeTest v3 verfügt über einen Fallback-Modus, wenn GeeTest-Server nicht erreichbar sind:

Modus success-Wert Verhalten
Online 1 Normale Challenge-Response mit GeeTest-Servern
Offline 0 Vereinfachte lokale Überprüfung

Im Offline-Modus wird die Challenge lokal generiert und die Verifizierung ist einfacher. Die meisten Websites verwenden den Online-Modus.

Fehlerbehebung

Problem Ursache Lösung
## Fehlerbehebung
Problem Ursache Lösung
GeeTest-Challenge läuft ab Zu lange zwischen Registrierung und Lösung Challenge sofort nach Registrierung lösen, kein Caching
validate-Parameter wird abgelehnt Challenge wurde mehrfach verwendet Neue Challenge pro Anfrage registrieren
gt/challenge stimmen nicht überein Aus falscher Netzwerkanfrage extrahiert Registrierungs-Request des Backends prüfen, nicht Client-Side

Verwandte Leitfäden

  • GeeTest v3 per API lösen
  • GeeTest v3 Slider-Parameter extrahieren
  • Häufige GeeTest v3 Fehler und Lösungen
Kommentare sind für diesen Artikel deaktiviert.

Verwandte Beiträge

Explainers GeeTest v4 CAPTCHA-Änderungs- und Lösungsleitfaden
Gee Test v 4 Änderungen und Lösungshandbuch: Unterschiede zu v 3, neue captcha_id-Parameter und Integration mit Captcha AI.

Gee Test v 4 Änderungen und Lösungshandbuch: Unterschiede zu v 3, neue captcha_id-Parameter und Integration mi...

Apr 25, 2026