Explainers

GeeTest v3 challenge-response akışı: teknik inceleme

GeeTest v3'ü otomatikleştirmeye çalışan çoğu geliştirici tek bir token arar ve bulamaz. reCAPTCHA'da tek g-recaptcha-response her şeyi hallederken, GeeTest v3 size üç ayrı değer üretir ve bunları doğru sırada toplamanız gerekir:

  • geetest_challenge — değiştirilmiş challenge token'ı
  • geetest_validate — doğrulama karması
  • geetest_seccode — güvenlik kodu

Bunun için önce protokolü anlamak gerekir. Aşağıda akışı kayıt adımından doğrulamaya kadar ayırıyor ve CaptchaAI'nin nereye girdiğini gösteriyoruz.

Protokolün iki aşaması

GeeTest v3 iki aşamada çalışır: biri sunucuda sessizce olur, diğeri kullanıcının gördüğü kaydırıcıyı ve doğrulamayı kapsar.

Kayıt aşaması (sunucu tarafı)

Sitenin arka ucu, yeni bir doğrulama oturumu açmak için GeeTest ile konuşur:

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

Doğrulama aşaması (istemci + sunucu tarafı)

Tarayıcı bileşeni oluşturur, kullanıcı çözer ve sonuç sunucuda yeniden doğrulanır:

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" }

Adım 1: kayıt API çağrısı

Arka uç, GeeTest'in kayıt uç noktasını çağırır:

GET https://api.geetest.com/register.php?gt=GT_ID&json_format=1
  • Dönen yanıt:
{
  "success": 1,
  "gt": "81dc9bdb52d04dc20036dbd8313ed055",
  "challenge": "a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6",
  "new_captcha": true
}
Parametre Anlamı
gt GeeTest kimliği — sitenin GeeTest hesabını tanımlar
challenge Bu oturuma özel, tek kullanımlık challenge token'ı
new_captcha Yeni CAPTCHA biçiminin kullanılıp kullanılmayacağı

Kritik nokta: challenge değeri tek kullanımlıktır ve kısa ömürlüdür. Her sayfa yüklemesi yeni bir değer üretir; bayat bir değerle çözüm gönderemezsiniz.

Adım 2: widget'ın oluşturulması

Tarayıcı gt ve challenge'yi alır ve GeeTest bileşenini başlatır:

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
  });
});

Adım 3: challenge türleri

GeeTest v3 birden fazla doğrulama türü sunar ve hangisinin çıkacağına kendisi karar verir:

Tür Kullanıcı eylemi Açıklama
Kaydırıcı Yapboz parçasını sürükleyin Resmi tamamlamak için parçayı yerine oturtun
Simge tıklama Simgelere sırayla tıklayın Gösterilen sırayla belirli simgeleri seçin
Kelime tıklama Karakterlere tıklayın Çince karakterleri doğru sırayla tıklayın
Uzamsal Tıklayın/seçin Uzamsal akıl yürütme doğrulaması

Türü, sitenin yapılandırmasına ve kullanıcı risk profiline göre GeeTest belirler; kod tarafında hepsine hazır olun.

Adım 4: çözüm değerleri

Doğrulama tamamlanınca bileşen üç değer üretir:

{
  "geetest_challenge": "a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6xy",
  "geetest_validate": "abc123def456_validate",
  "geetest_seccode": "abc123def456_validate|jordan"
}
Değer Açıklama
geetest_challenge Değiştirilmiş challenge token'ı (orijinal + 2 ek karakter)
geetest_validate Doğrulama karması
geetest_seccode Güvenlik kodu (validate + \|jordan son eki)

Adım 5: sunucu tarafı doğrulama

Arka uç, bu üç değeri son onay için GeeTest'e geri gönderir:

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

seccode=abc123def456_validate|jordan
&challenge=a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6xy
&sdk=geetest-python-3.0.0
  • GeeTest yanıtı:
{
  "seccode": "abc123def456_validate",
  "validate": "abc123def456_validate"
}

CaptchaAI için gt ve challenge parametrelerini çıkarma

CaptchaAI'ye görev göndermeden önce sayfadan yalnızca gt ve challenge'yi toplarsınız. Aracınıza göre üç yol var:

  • Yöntem 1 — kayıt yanıtını yakalama: ağ trafiğini dinleyip register çağrısını okuyun.
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://staging.example.com/qa-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')}")
  • Yöntem 2 — sayfa DOM'undan okuma: değerler öznitelik olarak duruyorsa doğrudan okuyun.
gt = page.evaluate("() => document.querySelector('[data-gt]')?.dataset.gt")
challenge = page.evaluate("() => document.querySelector('[data-challenge]')?.dataset.challenge")
  • Yöntem 3 — initGeetest çağrısını ayıklama: sayfa kaynağında çağrıyı düzenli ifadeyle arayın.
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)

GeeTest v3'ü CaptchaAI ile çözme

Çıkardığınız parametreleri method=geetest ile gönderin:

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

key=YOUR_API_KEY
&method=geetest
&gt=81dc9bdb52d04dc20036dbd8313ed055
&challenge=a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6
&pageurl=https://staging.example.com/qa-login
&json=1
  • Sonucu sorgulama:
GET https://ocr.captchaai.com/res.php?key=YOUR_API_KEY&action=get&id=TASK_ID&json=1
  • CaptchaAI yanıtı:
{
  "status": 1,
  "request": {
    "geetest_challenge": "a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6xy",
    "geetest_validate": "abc123def456_validate",
    "geetest_seccode": "abc123def456_validate|jordan"
  }
}

Sitenin doğrulama adımı için gereken üç değeri tek yanıtta alırsınız. Pratikte:

  • GeeTest v3, CaptchaAI'de genel kullanıma açık bir türdür; tipik çözüm süresi 12 saniyenin altındadır.
  • Faturalama thread bazlıdır: BASIC ($15/ay, 5 thread) planı, düşük hacimli bir Istanbul e-ticaret ekibinin login veya checkout akışını doğrulamaya yeter.
  • Kazınan veriler kişisel veri içeriyorsa KVKK kapsamındasınız; otomasyonu yalnızca yetkili QA akışlarında kullanın.

Yaygın sorunlar ve çözümleri

Sorun Sebep Düzeltme
challenge değeri boş geliyor Kayıt adımı başarısız oldu Sitenin GeeTest'i doğru yükleyip yüklemediğini kontrol edin
Çözüm reddedildi Challenge'ın süresi doldu Taze challenge'yi çıkarıp hemen çözün
Yanlış gt değeri Sayfada birden fazla GeeTest örneği var gt'yi doğru bileşenden çıkarın
Üç değer döndü ama form gitmiyor Eksik form alanları Üç değeri de doğru girişlere yerleştirin

Çevrimiçi ve çevrimdışı mod farkı

GeeTest v3, sunuculara erişilemediğinde devreye giren bir yedek moda sahiptir:

Mod success değeri Davranış
Çevrimiçi 1 GeeTest sunucularıyla normal challenge-response
Çevrimdışı 0 Basitleştirilmiş yerel doğrulama

Çevrimdışı modda challenge yerel olarak üretilir ve doğrulama daha basittir. Üretimdeki sitelerin büyük çoğunluğu çevrimiçi modu kullanır.

Sık sorulan sorular

CaptchaAI GeeTest v3'ü destekliyor mu, hangi method ile?

Evet. GeeTest v3 genel kullanıma açık bir türdür ve method=geetest ile gönderilir. Yanıt olarak geetest_challenge, geetest_validate ve geetest_seccode değerlerini alırsınız.

GeeTest v4'ü de çözebilir miyim?

Henüz değil. GeeTest v4 desteği çok yakında planlanıyor; şu an yalnızca v3 üretimde kullanılabilir.

Bir GeeTest çözümü ne kadar sürer?

GeeTest v3 için tipik çözüm süresi 12 saniyenin altındadır ve desteklenen türlerde başarı oranı yüksektir. Süre ortama ve hacme göre değişebilir.

GeeTest v3 çözümü ayrıca ücretlendiriliyor mu?

Hayır. CaptchaAI thread bazlı faturalandırır; plan içinde CAPTCHA türüne göre ücret yoktur. BASIC ($15/ay, 5 thread) ile başlayabilirsiniz.

İlgili makaleler

Sonraki adımlar

GeeTest v3'ün üç değerli yanıtını iş akışınıza bağlayın — CaptchaAI API anahtarınızı alın ve method=geetest ile ilk çözümünüzü gönderin.

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