Teknik Açıklamalar

GeeTest v3 Mücadele-Yanıt İş Akışı: Ayrıntılı Teknik İnceleme

GeeTest v3, çok adımlı bir sorgulama-yanıt protokolü kullanır. Tek bir tokenın her şeyi çözdüğü reCAPTCHA'dan farklı olarak GeeTest, her biri farklı parametreler üreten bir kayıt adımını, token değişimini ve son doğrulamayı içerir. Bu akışı anlamak, CaptchaAI ile doğru entegrasyon için çok önemlidir.

İki Aşamalı Protokol

GeeTest v3 iki aşamada çalışır:

Aşama 1: Kayıt (Sunucu Tarafı)

Sitenin arka ucu yeni bir mücadeleyi kaydetmek için GeeTest ile iletişime geçer:

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

Aşama 2: Doğrulama (İstemci Tarafı + Sunucu Tarafı)

Tarayıcı sorunu oluşturur, kullanıcı sorunu çözer ve sonuç 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" }

Ayrıntılı Akış

1. Adım: Kayıt API Çağrısı

Sitenin arka ucu GeeTest'in kayıt uç noktasını çağırır:

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

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 oturum için benzersiz meydan okuma jetonu
new_captcha Yeni CAPTCHA biçiminin kullanılıp kullanılmayacağı

Önemli: challenge değeri tek kullanımlıktır ve zamanla sınırlıdır. Her sayfa yüklemesi yeni bir zorluk yaratır.

2. Adım: Oluşturmaya Zorlayın

Tarayıcı gt ve challenge'yi alır ve GeeTest widget'ını 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: Mücadele Türleri

GeeTest v3 çeşitli zorluk türlerini destekler:

Tür Kullanıcı eylemi Açıklama
Kaydırıcı Bulmaca parçasını sürükleyin Resmi tamamlamak için yapboz parçasını hareket ettirin
Simge tıklaması Simgelere sırayla tıklayın Gösterilen sırayla belirli simgelere tıklayın
Kelime tıklaması Karakterlere tıklayın Çince karakterleri doğru sırayla tıklayın
Uzay Tıklayın/select Uzamsal akıl yürütme mücadelesi

Mücadele türü, sitenin yapılandırmasına ve kullanıcı risk profiline göre GeeTest tarafından belirlenir.

Adım 4: Çözüm Değerleri

Çözdükten sonra widget üç değer üretir:

{
  "geetest_challenge": "a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6xy",
  "geetest_validate": "abc123def456_validate",
  "geetest_seccode": "abc123def456_validate|jordan"
}
Değer Açıklama
geetest_challenge Değiştirilmiş meydan okuma jetonu (orijinal + 2 ekstra karakter)
geetest_validate Doğrulama karması
geetest_seccode Güvenlik kodu (doğrula + `\

Adım 5: Sunucu Tarafı Doğrulaması

Site arka ucu, doğrulama için bu üç değeri GeeTest'e gönderir:

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

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

GeeTest şunu yanıtlıyor:

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

CaptchaAI için Parametrelerin Çıkarılması

CaptchaAI ile çözmek için şu sayfadan gt ve challenge'ye ihtiyacınız var:

Yöntem 1: Kayıt Yanıtını Durdurma

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 JavaScript'inden ayıklama

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ından

initGeetest çağrısı için sayfa kaynağını 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)

CaptchaAI ile çözme

Çıkarılan parametreleri 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

Sonuç için anket:

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

CaptchaAI şunu döndürür:

{
  "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 de alırsınız.

Çevrimdışı ve Çevrimiçi Mod

GeeTest v3, GeeTest sunucularına erişilemediğinde bir geri dönüş moduna sahiptir:

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

Çevrimdışı modda, sorgulama yerel olarak oluşturulur ve doğrulama daha basittir. Çoğu site çevrimiçi modu kullanır.

Sorun giderme

Sorun Sebep Düzeltme
challenge değeri boş Kayıt başarısız oldu Sitenin GeeTest'i doğru yükleyip yüklemediğini kontrol edin
Çözüm reddedildi Mücadelenin süresi doldu Taze challenge'yi çıkarın ve hemen çözün
Yanlış gt değeri Sayfada birden fazla GeeTest örneği gt'yi doğru widget'tan çıkarın
Üç değer döndürüldü ancak form gönderilmiyor Eksik form alanları Üç değeri de doğru girişlere enjekte edin

SSS

GeeTest'in neden hem gt hem de challenge'ye ihtiyacı var?

gt, sitenin GeeTest hesabını (kalıcı) tanımlar. challenge, tekrar saldırılarını önleyen, oturuma özel bir tokendir; her zorluk yalnızca bir kez çözülebilir.

GeeTest meydan okumasını yeniden kullanabilir miyim?

Hayır. Her challenge değeri tek kullanımlıktır. Sorun çözüldükten (veya süresi dolduktan) sonra, kayıt API'sinden yeni bir tane almanız gerekir.

GeeTest mücadelesi ne kadar sürer?

Mücadeleler genellikle 1-2 dakika içinde sona erer. Parametreleri çıkardıktan hemen sonra çözün ve gönderin.

İlgili Makaleler

Sonraki Adımlar

GeeTest v3 zorluklarını çözün —CaptchaAI API anahtarınızı alınve üç değerli yanıtı iş akışınıza entegre edin.

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