API Eğitimleri

GeeTest Slide CAPTCHA Parametreleri ve API Kılavuzu

GeeTest CAPTCHA gönderimlerindeki her parametrede uzmanlaşın. gt, challenge ve diğer değerleri nasıl çıkaracağınızı ve bunları CaptchaAI'ye doğru şekilde nasıl göndereceğinizi öğrenin.


GeeTest v3 Parametreleri

Parametre Gerekli Açıklama
gt Evet GeeTest hesap kimliği (32 karakterlik onaltılık). Sayfa kaynağında veya API yanıtında bulundu
challenge Evet Oturuma özel sorgulama dizesi. Çözüm başına taze olmalı
pageurl Evet CAPTCHA'yı gösteren sayfanın tam URL'si
api_server Hayır Özel GeeTest API sunucusu alt alanı

Bir Sayfadan Parametreleri Çıkarma

# extract_geetest_params.py
import requests
import re
import json


def extract_geetest_v3(page_url, session=None):
    """Extract GeeTest v3 gt and challenge from a page."""
    if session is None:
        session = requests.Session()
        session.headers["User-Agent"] = (
            "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
            "AppleWebKit/537.36 Chrome/125.0.0.0 Safari/537.36"
        )

    resp = session.get(page_url, timeout=15)
    html = resp.text

    # Method 1: Extract gt from HTML
    gt_match = re.search(r'gt["\']?\s*[:=]\s*["\']([a-f0-9]{32})', html)
    gt = gt_match.group(1) if gt_match else None

    # Method 2: Find API endpoint that returns challenge
    api_match = re.search(r'(https?://[^"\']+register-slide[^"\']*)', html)

    challenge = None
    if api_match:
        api_url = api_match.group(1)
        api_resp = session.get(api_url, timeout=10)
        try:
            data = api_resp.json()
            challenge = data.get("challenge")
            gt = gt or data.get("gt")
        except json.JSONDecodeError:
            pass

    if not challenge:
        # Try embedded challenge
        ch_match = re.search(r'challenge["\']?\s*[:=]\s*["\']([a-f0-9]+)', html)
        challenge = ch_match.group(1) if ch_match else None

    return {"gt": gt, "challenge": challenge, "pageurl": page_url}


# Usage
params = extract_geetest_v3("https://staging.example.com/qa-login")
print(f"gt: {params['gt']}")
print(f"challenge: {params['challenge']}")

GeeTest'in CaptchaAI'ye gönderilmesi

# solve_geetest.py
import requests
import time
import os


def solve_geetest(gt, challenge, pageurl, api_server=None):
    """Solve GeeTest v3 slide CAPTCHA via CaptchaAI."""
    api_key = os.environ["CAPTCHAAI_API_KEY"]

    payload = {
        "key": api_key,
        "method": "geetest",
        "gt": gt,
        "challenge": challenge,
        "pageurl": pageurl,
        "json": 1,
    }

    if api_server:
        payload["api_server"] = api_server

    # Submit
    resp = requests.post(
        "https://ocr.captchaai.com/in.php",
        data=payload,
        timeout=30,
    )
    result = resp.json()

    if result.get("status") != 1:
        raise RuntimeError(f"Submit failed: {result.get('request')}")

    task_id = result["request"]

    # Poll — GeeTest typically solves in 10-20 seconds
    time.sleep(10)
    for _ in range(30):
        resp = requests.get("https://ocr.captchaai.com/res.php", params={
            "key": api_key,
            "action": "get",
            "id": task_id,
            "json": 1,
        }, timeout=15)
        data = resp.json()

        if data.get("status") == 1:
            return data["request"]  # Returns challenge, validate, seccode
        if data["request"] != "CAPCHA_NOT_READY":
            raise RuntimeError(data["request"])
        time.sleep(5)

    raise TimeoutError("GeeTest solve timeout")

Çözümü Kullanma

Çözüm, hedef sitenin doğrulama uç noktasına gönderilmesi gereken üç değeri döndürür:

# submit_solution.py
import json


def submit_geetest_solution(session, validation_url, solution, original_challenge):
    """Submit GeeTest solution to the target site."""
    # Parse solution if string
    if isinstance(solution, str):
        solution = json.loads(solution)

    payload = {
        "geetest_challenge": solution.get("challenge", original_challenge),
        "geetest_validate": solution.get("validate", ""),
        "geetest_seccode": solution.get("seccode", ""),
    }

    resp = session.post(validation_url, data=payload, timeout=30)
    return resp


# Complete flow
def full_geetest_flow(page_url, validation_url):
    import requests
    from extract_geetest_params import extract_geetest_v3

    session = requests.Session()
    session.headers["User-Agent"] = (
        "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
        "AppleWebKit/537.36 Chrome/125.0.0.0 Safari/537.36"
    )

    # Step 1: Extract parameters
    params = extract_geetest_v3(page_url, session)
    print(f"gt: {params['gt']}, challenge: {params['challenge'][:16]}...")

    # Step 2: Solve
    solution = solve_geetest(
        params["gt"], params["challenge"], params["pageurl"],
    )
    print("Solved!")

    # Step 3: Submit
    resp = submit_geetest_solution(
        session, validation_url, solution, params["challenge"],
    )
    print(f"Validation response: {resp.status_code}")
    return resp

Tazeliğe meydan okuyun

challenge parametresi oturuma özeldir ve süresi hızla dolar:

# fresh_challenge.py
import time


def get_fresh_challenge(session, register_url):
    """Always fetch a fresh challenge before solving."""
    resp = session.get(register_url, timeout=10)
    data = resp.json()

    challenge = data.get("challenge")
    if not challenge:
        raise ValueError("No challenge returned")

    return challenge


def solve_with_fresh_challenge(session, gt, register_url, pageurl):
    """Ensure challenge is fresh before submitting to CaptchaAI."""
    challenge = get_fresh_challenge(session, register_url)

    # Submit immediately — don't let it expire
    solution = solve_geetest(gt, challenge, pageurl)
    return solution

Ana kural: Mücadeleyi çıkarın ve saniyeler içinde CaptchaAI'ye gönderin. Eski bir meydan okuma her zaman başarısız olacaktır.


Özel API Sunucusu

Bazı siteler özel bir GeeTest alt alan adı kullanır:

# The api_server parameter specifies a custom GeeTest backend
# Default: api.geetest.com
# Custom examples: api-na.geetest.com, api.geetest.com/ajax-custom

solution = solve_geetest(
    gt="abc123...",
    challenge="def456...",
    pageurl="https://staging.example.com/qa-login",
    api_server="api-na.geetest.com",  # North America endpoint
)

Sorun giderme

Sorun Sebep Düzeltme
ERROR_CAPTCHA_UNSOLVABLE Bayat meydan okuma Göndermeden hemen önce yeni meydan okuma getir
validate boş Yanlış API sürümü GeeTest v4 siteleri için version=4'yi kullanın
Çözüm site tarafından reddedildi seccode eksik Üç alanın da gönderildiğinden emin olun
gt parametresi bulunamadı JavaScript aracılığıyla yüklendi Kayıt uç noktası için Selenyum kullanın veya XHR yanıtlarını kontrol edin

SSS

gt ve challenge arasındaki fark nedir?

gt sitenin GeeTest hesap kimliğidir - aynı kalır.challenge oturum başına oluşturulur ve her seferinde yeniden çıkarılması gerekir.

Bir meydan okuma ne kadar süreyle geçerlidir?

Tipik olarak 60-120 saniye. Çıkarın ve hemen CaptchaAI'ye gönderin.

api_server ne yapar?

CaptchaAI'ye hangi GeeTest API sunucusunun kullanılacağını söyler. Yalnızca site varsayılan olmayan bir GeeTest uç noktası kullandığında gereklidir. api-*.geetest.com için sayfanın ağ isteklerini kontrol edin.


İlgili Kılavuzlar


GeeTest parametrelerinde uzmanlaşın –CaptchaAI ile başlayın.

Bu makale için yorumlar devre dışı bırakılmıştır.