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
>=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
- Geetest V3 Düğümlerini Çözme
- Geetest V3 Nodejs Captchaai'yi Çözme
- Recaptcha Kurumsal Değerlendirme API'sinin Ayrıntılı İncelemesi
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.