Tutorial API

Cara Solve GeeTest v3 Menggunakan API

GeeTest v3 menghadirkan challenge interaktif — slide puzzle, pemilihan ikon, atau pencocokan kata. Tidak seperti reCAPTCHA, GeeTest menggunakan alur verifikasi khusus dengan tiga parameter (gt, challenge, api_server) yang harus Anda ekstrak dari halaman sebelum solve.

Panduan ini menjelaskan proses lengkap mengekstrak parameter GeeTest dan solve challenge dengan API CaptchaAI.


Prasyarat

Item Nilai
API key CaptchaAI Dari captchaai.com
Nilai GeeTest gt Identifier statis per situs
GeeTest challenge Nilai dinamis per sesi
URL halaman URL tempat GeeTest muncul
Bahasa Python 3.7+ atau Node.js 14+

Langkah 1: Ekstrak parameter GeeTest

GeeTest memerlukan tiga parameter. gt bersifat statis (sama untuk setiap permintaan), sedangkan challenge berubah per sesi.

Metode 1: Tab jaringan

  1. Buka tab DevTools → Jaringan
  2. Filter berdasarkan register-slide atau gettype.php atau get.php
  3. Picu captcha dan cari permintaan inisialisasi
  4. Responsnya berisi gt, challenge, dan terkadang api_server
{
  "success": 1,
  "gt": "019924a82c70bb123aae90d483087f94",
  "challenge": "12345678abc90def12345678abc90def",
  "new_captcha": true
}

Metode 2: Sumber halaman

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

Metode 3: Endpoint API

Banyak situs mengambil parameter GeeTest dari endpoint API mereka sendiri:

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

Langkah 2: Submit Task ke CaptchaAI

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

Langkah 3: Poll Solusi

Solusi GeeTest mengembalikan tiga nilai: challenge, validate, dan 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');
}

Langkah 4: Submit Solusi ke Situs Target

Kirim ketiga nilai ke endpoint verifikasi situs:

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

Contoh Python lengkap

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

Pemecahan Masalah

Error Penyebab Solusi
ERROR_BAD_PARAMETERS GT atau challenge tidak ada Keduanya diperlukan — ekstrak dari halaman
ERROR_CAPTCHA_UNSOLVABLE Challenge sudah kedaluwarsa atau tidak valid Ambil challenge baru dari situs
Solusi ditolak oleh situs Nilai challenge basi Challenge sekali pakai; ambil yang baru untuk setiap percobaan
geetest_validate kosong Penyelesaian gagal secara internal Coba lagi dengan challenge baru

Contoh lengkap yang dapat dijalankan

Butuh proyek kerja lengkap dengan pengaturan lingkungan, polling, percobaan ulang, dan penanganan kesalahan?

Lihat contoh lengkap yang dapat dijalankan di GitHub →


Pertanyaan Umum

Mengapa harus mengambil challenge baru setiap saat?

Nilai challenge hanya sekali pakai. Setelah digunakan (baik karena solve berhasil atau kedaluwarsa), backend situs akan menolaknya. Selalu ambil challenge baru sebelum setiap solve.

Apa parameter api_server?

Ini menentukan server GeeTest mana yang menangani verifikasi. Nilai umum adalah api.geetest.com dan api-na.geetest.com. Jika situs menggunakan server khusus, sertakan dalam request Anda.

Berapa lama solve GeeTest?

Biasanya 15–30 detik. Slide puzzle dan challenge ikon membutuhkan waktu yang sama.

Bisakah saya solve GeeTest v4 dengan metode ini?

Tidak. GeeTest v4 menggunakan protokol yang berbeda. Periksa apakah CaptchaAI mendukung versi GeeTest tertentu di situs.

Apa perbedaan antara GeeTest slide dan click challenge?

GeeTest v3 memiliki beberapa tipe challenge (slide, klik ikon, pencocokan kata), tetapi parameter dan alur API identik. CaptchaAI menangani semua tipe v3 secara transparan.


Panduan Terkait

  • Error dan Perbaikan GeeTest v3 Umum
  • GeeTest vs reCAPTCHA
Komentar dinonaktifkan untuk artikel ini.