API Tutorials

API Kullanarak GeeTest v3 Nasıl Çözülür?

GeeTest v3 doğrulamasını CaptchaAI API'siyle çözmek dört adımdan oluşur: sayfadan gt ve challenge değerlerini çıkarın, bunları geetest metoduyla in.php'ye gönderin, res.php üzerinden sonucu sorgulayın ve dönen üç değeri (geetest_challenge, geetest_validate, geetest_seccode) hedef forma iletin. Süreç tipik olarak 12 saniyenin altında, yüksek başarı oranıyla tamamlanır.

reCAPTCHA'nın aksine GeeTest, sabit bir sitekey yerine sayfaya özgü gt değeri ile oturuma özgü challenge değerini birlikte kullanan özel bir doğrulama akışı çalıştırır — arayüzde slayt bulmaca, simge seçimi veya kelime eşleştirme görseniz de bu ikili arka planda her zaman aynı şekilde işler. Bu rehber, parametrelerin çıkarılmasından çözümün hedef siteye gönderilmesine kadar tüm akışı Python ve Node.js örnekleriyle gösterir.

Not: CaptchaAI şu anda yalnızca GeeTest v3'ü çözer. GeeTest v4 farklı bir protokol kullanır ve henüz desteklenmiyor; entegrasyona başlamadan önce hedef sitenin hangi sürümü çalıştırdığını doğrulayın.


Örnek senaryo: Bir e-ticaret QA ekibinin GeeTest v3 testi

Bir e-ticaret platformunun kayıt formu GeeTest v3 slayt bulmacası kullanıyor. İstanbul merkezli bir otomasyon ekibi bu formu her gece Europe/Istanbul saat diliminde çalışan bir QA hattında test ediyor; test verilerinde +90 formatlı sahte telefon numaraları kullanılıyor ve gerçek kullanıcı bilgisi hiç geçmiyor — bu hem KVKK kapsamındaki kişisel veri riskini ortadan kaldırıyor hem de testin staging ortamıyla sınırlı kalmasını sağlıyor. Akış dört aşamada tamamlanıyor:

Aşama Ne olur
1 QA betiği sitenin kayıt uç noktasını çağırır, gt ve challenge değerlerini alır
2 Değerler geetest metoduyla CaptchaAI'ye gönderilir
3 res.php sorgulanır; challenge, validate, seccode değerleri döner
4 Üç değer test ortamındaki forma iletilir, kayıt akışı tamamlanır

Aşağıdaki dört adım, bu aşamaların kod düzeyindeki karşılığıdır.


Gereksinimler

Başlamadan önce şunlara ihtiyacınız var:

  • CaptchaAI API anahtarıcaptchaai.com üzerinden edinin
  • GeeTest gt değeri — site başına sabit tanımlayıcı
  • GeeTest challenge değeri — oturum başına değişen, tek kullanımlık değer
  • Sayfa URL'si — GeeTest doğrulamasının göründüğü sayfa
  • Dil ortamı — Python 3.7+ veya Node.js 14+

Adım 1: GeeTest parametrelerini sayfadan çıkarın

GeeTest üç parametre gerektirir: gt her istekte aynıdır, challenge ise her oturumda değişir ve tek kullanımlıktır. Üç yöntemden biriyle çıkarabilirsiniz.

Yöntem 1: Ağ sekmesi

  • DevTools → sekmesini açın
  • register-slide, gettype.php veya get.php isteğine göre filtreleyin
  • CAPTCHA'yı tetikleyin ve başlatma isteğini bulun
  • Yanıt gt, challenge ve bazen api_server değerini içerir
{
  "success": 1,
  "gt": "019924a82c70bb123aae90d483087f94",
  "challenge": "12345678abc90def12345678abc90def",
  "new_captcha": true
}

Yöntem 2: Sayfa kaynağı

Bazı sitelerde gt değeri sayfa kaynağındaki initGeetest çağrısının içinde düz metin olarak durur; konsol üzerinden arayarak bulabilirsiniz.

// Search page source for initGeetest or gt value
document.querySelectorAll('script').forEach(s => {
  if (s.textContent.includes('initGeetest')) {
    console.log(s.textContent);
  }
});

Yöntem 3: API uç noktası

Birçok site GeeTest parametrelerini kendi kayıt uç noktasından JSON olarak döndürür — yukarıdaki örnek senaryodaki gibi, DevTools açmadan doğrudan bu uç noktayı otomasyon betiğinizden çağırabilirsiniz:

# The site's registration endpoint
params_response = requests.get("https://example.com/api/captcha/register")
data = params_response.json()
gt = data["gt"]
challenge = data["challenge"]

Bu yöntem CI/CD hatlarında ve toplu QA testlerinde özellikle işe yarar, çünkü tarayıcı başlatmadan çalışır.


Adım 2: Görevi CaptchaAI API'sine gönderin

Çıkardığınız gt ve challenge değerlerini geetest metoduyla in.php uç noktasına gönderin. api_server parametresini ne zaman eklemeniz gerektiği basittir:

  • Site yanıtı zaten bir api_server değeri içeriyorsa, onu aynen iletin
  • İçermiyorsa parametreyi tamamen atlayın — CaptchaAI varsayılan sunucuyu kullanır

Python

import requests
import time

API_KEY = "YOUR_API_KEY"

response = requests.get("https://ocr.captchaai.com/in.php", params={
    "key": API_KEY,
    "method": "geetest",
    "gt": "019924a82c70bb123aae90d483087f94",
    "challenge": "12345678abc90def12345678abc90def",
    "api_server": "api.geetest.com",  # Optional, use if site specifies
    "pageurl": "https://staging.example.com/qa-login",
    "json": 1
})

data = response.json()
if data.get("status") != 1:
    raise Exception(f"Submit error: {data.get('request')}")

task_id = data["request"]
print(f"Task submitted: {task_id}")

Node.js alternatifi:

const axios = require('axios');

const API_KEY = 'YOUR_API_KEY';

async function submitGeeTest(gt, challenge, pageurl) {
  const { data } = await axios.get('https://ocr.captchaai.com/in.php', {
    params: {
      key: API_KEY,
      method: 'geetest',
      gt,
      challenge,
      api_server: 'api.geetest.com',
      pageurl,
      json: 1
    }
  });

  if (data.status !== 1) throw new Error(`Submit error: ${data.request}`);
  return data.request;
}

Adım 3: Çözüm sonucunu sorgulayın

GeeTest çözümü tek bir token değil, üç ayrı değer döndürür: challenge, validate ve seccode. res.php uç noktasını periyodik olarak sorgulayarak sonucu alın.

Python

def get_geetest_solution(task_id):
    for attempt in range(30):
        time.sleep(5)
        result = requests.get("https://ocr.captchaai.com/res.php", params={
            "key": API_KEY,
            "action": "get",
            "id": task_id,
            "json": 1
        }).json()

        if result.get("status") == 1:
            return result["request"]
        if result.get("request") != "CAPCHA_NOT_READY":
            raise Exception(f"Error: {result.get('request')}")

    raise Exception("Timeout")

solution = get_geetest_solution(task_id)
# solution = {
#   "geetest_challenge": "12345678abc90def12345678abc90def1a",
#   "geetest_validate": "abcdef1234567890abcdef1234567890",
#   "geetest_seccode": "abcdef1234567890abcdef1234567890|jordan"
# }

Node.js alternatifi:

async function getGeeTestSolution(taskId) {
  for (let i = 0; i < 30; i++) {
    await new Promise(r => setTimeout(r, 5000));
    const { data } = await axios.get('https://ocr.captchaai.com/res.php', {
      params: { key: API_KEY, action: 'get', id: taskId, json: 1 }
    });
    if (data.status === 1) return data.request;
    if (data.request !== 'CAPCHA_NOT_READY') throw new Error(data.request);
  }
  throw new Error('Timeout');
}

Adım 4: Çözümü hedef siteye gönderin

Üç değeri de sitenin doğrulama uç noktasına iletin. Formda başka zorunlu alanlar varsa (kullanıcı adı, şifre vb.) bunları aynı istekte gönderin.

# Submit the GeeTest solution with the form data
verify_response = requests.post("https://example.com/api/login", data={
    "username": "user@example.com",
    "password": "password123",
    "geetest_challenge": solution["geetest_challenge"],
    "geetest_validate": solution["geetest_validate"],
    "geetest_seccode": solution["geetest_seccode"]
})

print(f"Login status: {verify_response.status_code}")

Gerçek kullanıcı bilgileriyle test yapmayın; QA akışında her zaman test hesapları ve staging ortamı kullanın. Bu hem KVKK uyumluluğu hem de hedef sitenin gerçek verisini korumak açısından önemlidir.


Eksiksiz Python örneği

Yukarıdaki dört adımı tek bir betikte birleştirirsek:

import requests
import time

API_KEY = "YOUR_API_KEY"
SITE_URL = "https://staging.example.com/qa-login"

# 1. Get GeeTest parameters from the site
params = requests.get("https://example.com/api/captcha/register").json()

# 2. Submit to CaptchaAI
submit = requests.get("https://ocr.captchaai.com/in.php", params={
    "key": API_KEY,
    "method": "geetest",
    "gt": params["gt"],
    "challenge": params["challenge"],
    "pageurl": SITE_URL,
    "json": 1
}).json()
task_id = submit["request"]

# 3. Poll for solution
for _ in range(30):
    time.sleep(5)
    result = requests.get("https://ocr.captchaai.com/res.php", params={
        "key": API_KEY, "action": "get", "id": task_id, "json": 1
    }).json()
    if result.get("status") == 1:
        solution = result["request"]
        break

# 4. Submit to site
login = requests.post(SITE_URL, data={
    "username": "user@example.com",
    "password": "pass",
    "geetest_challenge": solution["geetest_challenge"],
    "geetest_validate": solution["geetest_validate"],
    "geetest_seccode": solution["geetest_seccode"]
})
print(f"Result: {login.status_code}")

Sorun giderme

GeeTest entegrasyonlarında en sık karşılaşılan dört hata ve düzeltmeleri:

  • ERROR_BAD_PARAMETERSgt veya challenge eksik. İkisi de zorunludur; sayfadan yeniden çıkarın.
  • ERROR_CAPTCHA_UNSOLVABLEchallenge değerinin süresi doldu veya geçersiz. Siteden yeni bir challenge isteyin.
  • Çözüm site tarafından reddedildi — eski challenge değeri kullanıldı. challenge tek kullanımlıktır; her denemede yeniden alın.
  • geetest_validate boş döner — çözüm dahili olarak başarısız oldu. Yeni bir challenge ile yeniden deneyin.

Tam çalıştırılabilir örnek

Ortam kurulumu, sorgulama, yeniden deneme mantığı ve hata işleme dahil eksiksiz bir proje mi arıyorsunuz?

Çalıştırılabilir tam örneği GitHub'da inceleyin →


SSS

GeeTest v3 entegrasyonu sırasında geliştiricilerin en çok sorduğu beş soru:

GeeTest v3'te challenge değerini her denemede neden yeniden almam gerekiyor?

challenge tek kullanımlıktır. Bir kez tüketildiğinde — başarılı bir çözümle veya süre aşımıyla — sitenin arka ucu aynı değeri bir daha kabul etmez. Her çözüm denemesinden önce sayfadan yeni bir challenge çekin.

GeeTest v3 parametrelerini DevTools kullanmadan nasıl bulabilirim?

Birçok site gt ve challenge değerlerini kendi kayıt uç noktasından JSON olarak döndürür (bkz. Yöntem 3). Bu uç noktayı otomasyon betiğinizden doğrudan çağırarak tarayıcı hiç başlatmadan parametreleri alabilirsiniz.

GeeTest v3 çözümü CaptchaAI ile ne kadar sürer?

Genellikle 12 saniyenin altında, yüksek başarı oranıyla tamamlanır. Slayt, simge ve kelime eşleştirme zorlukları benzer sürelerde çözülür çünkü API parametreleri ve akış hepsinde aynıdır.

GeeTest v3 çözümü reddedilirse ne yapmalıyım?

Sırayla kontrol edin:

  • challenge değeri güncel mi — reddedilen çözümlerin büyük çoğunluğu eski challenge kullanmaktan kaynaklanır
  • geetest_validate alanı boş mu dönüyor
  • Sorun sürerse yeni bir challenge ile yeniden deneyin

Yoğun GeeTest v3 trafiği için hangi CaptchaAI planı yeterli?

Test ve düşük hacimli entegrasyonlar için BASIC ($15/ay, 5 thread) genellikle yeterlidir. Üretimde eşzamanlı istek sayınız arttıkça ADVANCE ($90/ay, 50 thread) veya üzerine geçin — CaptchaAI thread başına sınırsız çözüm sunar, yani maliyetiniz çözüm hacminden değil eşzamanlı thread sayınızdan etkilenir.


İlgili kılavuzlar

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