API Eğitimleri

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

GeeTest v3, slayt bulmacaları, simge seçimleri veya kelime eşleştirme gibi etkileşimli zorluklar sunar. ReCAPTCHA'dan farklı olarak GeeTest, çözmeden önce sayfadan çıkarmanız gereken üç parametreye (gt, challenge, api_server) sahip özel bir doğrulama akışı kullanır.

Bu kılavuz, GeeTest parametrelerinin çıkarılması ve CaptchaAI API ile sorunun çözülmesine ilişkin tüm süreci anlatmaktadır.


Gereksinimler

Öğe Değer
CaptchaAI API anahtarı İtibarencaptchaai.com
GeeTest gt değeri Statik site başına tanımlayıcı
GeeTest challenge Dinamik oturum başına değer
Sayfa URL'si GeeTest'in göründüğü URL
Dil Python 3.7+ veya Node.js 14+

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

GeeTest üç parametre gerektirir. gt statiktir (her istek için aynıdır), challenge ise oturum başına değişir.

Yöntem 1: Ağ sekmesi

  1. DevTools → sekmesini açın
  2. register-slide veya gettype.php veya get.php'ye göre filtrele
  3. Captcha'yı tetikleyin ve başlatma isteğini arayın
  4. Yanıt gt, challenge ve bazen api_server'yi içerir
{
  "success": 1,
  "gt": "019924a82c70bb123aae90d483087f94",
  "challenge": "12345678abc90def12345678abc90def",
  "new_captcha": true
}

Yöntem 2: Sayfa kaynağı

// 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 API'lerinden alır:

# 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"]

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

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

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

3. Adım: Çözüm için anket yapın

GeeTest çözümü üç değer döndürür: challenge, validate ve seccode.

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

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

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

Üç değeri de sitenin doğrulama uç noktasına 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}")

Python örneğini tamamlayın

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

Hata Sebep Düzeltme
ERROR_BAD_PARAMETERS Eksik GT veya Challenge Her ikisi de gereklidir — sayfadan alıntı
ERROR_CAPTCHA_UNSOLVABLE Yarışmanın süresi doldu veya geçersiz Siteden yeni bir meydan okumayı yeniden getirin
Çözüm site tarafından reddedildi Eski meydan okuma değeri Buradaki zorluk tek kullanımlıktır; her denemede yeni bir tane al
geetest_validate boş Dahili olarak çözme başarısız oldu Yeni bir meydan okumayla yeniden deneyin

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

Ortam kurulumu, yoklama, yeniden denemeler ve hata işleme ile eksiksiz bir çalışma projesine mi ihtiyacınız var?

GitHub →'deki çalıştırılabilir örneğin tamamına bakın


SSS

Neden her seferinde yeni bir meydan okuma getirmem gerekiyor?

challenge değeri tek kullanımlıktır. Bir kez tüketildiğinde (başarılı bir çözüm veya sürenin dolması nedeniyle), sitenin arka ucu onu reddedecektir. Her çözümden önce daima yeni bir meydan okuma getirin.

api_server parametresi nedir?

Doğrulamayı hangi GeeTest sunucusunun gerçekleştireceğini belirtir. Ortak değerler api.geetest.com ve api-na.geetest.com'dir. Site özel bir sunucu kullanıyorsa bunu isteğinize ekleyin.

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

Tipik olarak 15–30 saniye. Slayt bulmacaları ve simge zorlukları benzer süreler alır.

GeeTest v4'yi bu yöntemle çözebilir miyim?

Hayır. GeeTest v4 farklı bir protokol kullanır. CaptchaAI'nin sitedeki belirli GeeTest sürümünü destekleyip desteklemediğini kontrol edin.

GeeTest slayt ve tıklama zorlukları arasındaki fark nedir?

GeeTest v3'nin birden fazla zorluk türü vardır (slayt, simge tıklaması, kelime eşleşmesi), ancak API parametreleri ve akışı aynıdır. CaptchaAI tüm v3 türlerini şeffaf bir şekilde işler.


İlgili kılavuzlar

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