Pemecahan Masalah

Kesalahan dan Perbaikan Umum GeeTest v3

Sebagian besar kegagalan GeeTest v3 termasuk dalam salah satu dari tiga kelompok: error di tahap submit (kirim ke API), error di tahap polling (ambil hasil), dan kegagalan validasi halaman target (API mengembalikan nilai tapi halaman masih menolaknya). Masalah terbesar yang spesifik untuk GeeTest hampir selalu sama: nilai challenge yang sudah basi.

Dokumen API GeeTest v3 CaptchaAI menegaskan: Anda harus mendapatkan nilai challenge baru untuk setiap request solve. Setelah captcha dimuat di halaman, challenge lama menjadi tidak valid. Artinya integrasi GeeTest bisa gagal meski sebagian besar parameter terlihat benar.

Panduan ini menjelaskan setiap pola kegagalan umum beserta perbaikan respons kompetitif untuk masing-masingnya.


Kegagalan GeeTest #1: challenge Basi

Jika ada satu hal yang perlu diperiksa pertama kali, itu adalah kesegaran challenge.

GeeTest v3 memerlukan dua parameter utama:

  • gt — sitekey publik (statis, tidak berubah)
  • challenge — kunci challenge dinamis (berubah pada setiap page load)

Mengapa Rusak

Nilai challenge dihasilkan saat widget GeeTest diinisialisasi di halaman. Jika Anda menangkapnya sekali dan menggunakannya kembali pada beberapa request solve, setiap request setelah yang pertama akan:

  • ditolak API saat submit, atau
  • menghasilkan nilai yang ditolak halaman target karena challenge telah kedaluwarsa

Cara Memperbaiki

Sebelum setiap request solve, periksa network request halaman untuk menemukan API call yang mengembalikan challenge baru. Replay request tersebut untuk mendapatkan nilai baru, lalu segera kirimkan ke CaptchaAI.

# Pseudocode: fetch a fresh challenge before each solve
import requests

def get_fresh_challenge(target_url):
    """Hit the GeeTest init endpoint to get a new challenge."""
    resp = requests.get(f"{target_url}/geetest/register", timeout=10)
    data = resp.json()
    return data["challenge"], data["gt"]

challenge, gt = get_fresh_challenge("https://example.com")
# Now submit to CaptchaAI immediately — do not delay

Aturan praktis: Jika waktu antara menangkap challenge dan submit request solve lebih dari beberapa detik, refresh dulu.


Error di Tahap Submit

Kegagalan ini terjadi saat Anda submit task ke https://ocr.captchaai.com/in.php.

ERROR_WRONG_USER_KEY

Penyebab: Format API key salah (harus 32 karakter).

Perbaikan: Verifikasi key dari captchaai.com/api.php. Jangan tambahkan karakter atau spasi ekstra.

ERROR_KEY_DOES_NOT_EXIST

Penyebab: API key berformat benar tapi tidak cocok dengan akun aktif manapun.

Perbaikan: Login ke dashboard CaptchaAI dan konfirmasi key Anda aktif.

ERROR_ZERO_BALANCE

Penyebab: Tidak ada thread gratis yang tersedia di paket Anda saat ini.

Perbaikan: Tunggu thread kosong, kurangi concurrency, atau upgrade paket Anda.

ERROR_PAGEURL

Penyebab: Parameter pageurl tidak ada dalam request.

Perbaikan: Tambahkan URL lengkap halaman tempat widget GeeTest dimuat. Contoh:

pageurl=https://staging.example.com/qa-login

ERROR_BAD_PARAMETERS

Penyebab: Satu atau beberapa field wajib tidak ada atau formatnya salah. Untuk GeeTest, parameter yang diperlukan adalah:

Parameter Tipe Wajib Deskripsi
key String Ya API key CaptchaAI Anda
method String Ya Harus geetest
gt String Ya Sitekey publik statis
challenge String Ya Kunci challenge dinamis (harus fresh)
pageurl String Ya URL halaman lengkap

Perbaikan: Periksa apakah gt, challenge, dan pageurl semua ada dan diformat dengan benar.

Respons HTML atau 500/502

Penyebab: Error sementara di sisi server — bukan masalah parameter.

Perbaikan: Tunggu 5–10 detik dan coba lagi request tersebut.


Error di Tahap Polling

Kegagalan ini terjadi saat Anda polling https://ocr.captchaai.com/res.php.

CAPCHA_NOT_READY

Ini bukan error. Artinya captcha masih dalam proses solve. Solve GeeTest v3 di CaptchaAI biasanya membutuhkan kurang dari 12 detik dengan tingkat keberhasilan 100%.

Perbaikan: Tunggu 5 detik dan polling lagi. Jangan anggap ini sebagai kegagalan.

ERROR_WRONG_ID_FORMAT

Penyebab: Format ID captcha salah — ID harus berupa angka saja.

Perbaikan: Pastikan Anda menggunakan ID persis yang dikembalikan oleh in.php, tanpa modifikasi.

ERROR_WRONG_CAPTCHA_ID

Penyebab: ID tidak cocok dengan task yang disubmit.

Perbaikan: Periksa apakah Anda menggunakan ID yang benar dari respons submit. Jika Anda mengirimkan beberapa task, pastikan Anda melacak task yang tepat.

ERROR_EMPTY_ACTION

Penyebab: Parameter action tidak ada atau kosong dalam request polling Anda.

Perbaikan: Sertakan action=get di setiap permintaan polling:

https://ocr.captchaai.com/res.php?key=YOUR_KEY&action=get&id=CAPTCHA_ID

ERROR_CAPTCHA_UNSOLVABLE

Penyebab: Challenge tidak dapat di-solve — mungkin karena nilai challenge basi atau varian GeeTest yang tidak didukung.

Perbaikan: Refresh nilai challenge dan coba lagi.

ERROR_INTERNAL_SERVER_ERROR

Penyebab: Masalah di sisi server CaptchaAI.

Perbaikan: Tunggu 10 detik dan coba lagi.


Kegagalan Validasi Halaman Target

Ini adalah kegagalan paling sulit di-debug karena API CaptchaAI mengembalikan hasil yang valid, namun halaman target masih menolaknya.

Saat GeeTest v3 berhasil di-solve, API mengembalikan tiga nilai:

{
  "challenge": "1a2b3456cd67890e12345fab678901c2de",
  "validate": "09fe8d7c6ba54f32e1dcb0a9fedc8765",
  "seccode": "12fe3d4c56789ba01f2e345d6789c012|jordan"
}

Ini harus disubmit ke halaman target sebagai:

Field respons API Field halaman target
challenge geetest_challenge
validate geetest_validate
seccode geetest_seccode

Kegagalan 1: Pemetaan Field Salah

Gejala: API mengembalikan nilai, tapi halaman target langsung menolaknya.

Penyebab: Nilai yang dikembalikan dimasukkan ke field yang salah atau path request yang salah.

Perbaikan: Periksa network traffic dari solve GeeTest manual di halaman target. Temukan POST request yang mengirimkan hasil GeeTest dan cocokkan dengan nama field Anda.

Kegagalan 2: challenge Basi di Upstream

Gejala: API mengembalikan nilai, tapi halaman menyatakan challenge telah kedaluwarsa atau tidak valid.

Penyebab: Nilai challenge diambil terlalu awal atau digunakan kembali.

Perbaikan: Ambil challenge baru segera sebelum setiap request solve. Jangan cache atau gunakan kembali.

Kegagalan 3: Konteks Halaman Salah

Gejala: Validasi gagal meskipun dengan input baru.

Penyebab: pageurl yang dikirim ke CaptchaAI tidak cocok dengan halaman sebenarnya tempat widget GeeTest dimuat.

Perbaikan: Gunakan URL yang tepat, termasuk protokol dan path. Jika widget dimuat via AJAX pada route berbeda, gunakan URL route tersebut.

Kegagalan 4: Struktur Request Tidak Cocok

Gejala: Field sudah benar tapi format request salah.

Penyebab: Halaman target mengharapkan field GeeTest dalam content type tertentu (misalnya, JSON body vs. form-encoded) atau bersama field form lainnya.

Perbaikan: Bandingkan request submit Anda dengan network traffic dari solve manual. Cocokkan content type, urutan field, dan field tambahan lainnya.


Referensi Cepat Perbaikan Error

Error / Gejala Tahap Kemungkinan Penyebab Perbaikan
ERROR_WRONG_USER_KEY Submit API key salah format Verifikasi key 32 karakter
ERROR_KEY_DOES_NOT_EXIST Submit Key tidak valid Periksa dashboard
ERROR_ZERO_BALANCE Submit Tidak ada thread gratis Tunggu atau upgrade paket
ERROR_PAGEURL Submit pageurl tidak ada Tambahkan URL halaman lengkap
ERROR_BAD_PARAMETERS Submit gt, challenge, atau pageurl tidak ada Verifikasi semua field wajib
CAPCHA_NOT_READY Polling Solve masih berjalan Tunggu 5 detik, coba lagi
ERROR_WRONG_ID_FORMAT Polling ID captcha non-numerik Gunakan ID persis dari in.php
ERROR_WRONG_CAPTCHA_ID Polling ID captcha tidak valid Verifikasi ID submit
ERROR_EMPTY_ACTION Polling action=get tidak ada Tambahkan parameter action
ERROR_CAPTCHA_UNSOLVABLE Polling Challenge basi atau varian tidak didukung Refresh challenge, coba lagi
API mengembalikan nilai tapi halaman menolak Validasi Challenge basi, field salah, URL salah Refresh challenge, verifikasi pemetaan field

Python: Solve GeeTest v3 dengan Challenge Baru

import time
import requests

API_KEY = "YOUR_CAPTCHAAI_API_KEY"

SUBMIT_URL = "https://ocr.captchaai.com/in.php"
RESULT_URL = "https://ocr.captchaai.com/res.php"


def get_fresh_challenge(target_url):
    """Fetch a fresh GeeTest challenge from the target page."""
    resp = requests.get(f"{target_url}/api/geetest/register", timeout=10)
    data = resp.json()
    return data["gt"], data["challenge"]


def solve_geetest_v3(api_key, gt, challenge, pageurl):
    """Submit a GeeTest v3 challenge and return the validation package."""

    # Submit
    submit_resp = requests.post(
        SUBMIT_URL,
        data={
            "key": api_key,
            "method": "geetest",
            "gt": gt,
            "challenge": challenge,
            "pageurl": pageurl,
            "json": 1,
        },
        timeout=30,
    )
    submit_resp.raise_for_status()
    submit_data = submit_resp.json()

    if submit_data.get("status") != 1:
        raise RuntimeError(f"Submit failed: {submit_data}")

    captcha_id = submit_data["request"]
    print(f"Task created — captcha ID: {captcha_id}")

    # Wait before first poll
    time.sleep(15)

    # Poll for result
    for _ in range(60):
        result_resp = requests.get(
            RESULT_URL,
            params={
                "key": api_key,
                "action": "get",
                "id": captcha_id,
                "json": 1,
            },
            timeout=30,
        )
        result_resp.raise_for_status()
        result_data = result_resp.json()

        if result_data.get("request") == "CAPCHA_NOT_READY":
            time.sleep(5)
            continue

        if result_data.get("status") == 1:
            return result_data["request"]

        raise RuntimeError(f"Polling error: {result_data}")

    raise TimeoutError("GeeTest v3 solve timed out")


# Usage: always fetch a fresh challenge first
PAGE_URL = "https://staging.example.com/qa-login"
gt, challenge = get_fresh_challenge(PAGE_URL)
result = solve_geetest_v3(API_KEY, gt, challenge, PAGE_URL)
print(f"Result: {result}")

# The result contains: challenge, validate, seccode
# Map them to: geetest_challenge, geetest_validate, geetest_seccode

Node.js: Solve GeeTest v3 dengan Challenge Baru

const API_KEY = "YOUR_CAPTCHAAI_API_KEY";
const SUBMIT_URL = "https://ocr.captchaai.com/in.php";
const RESULT_URL = "https://ocr.captchaai.com/res.php";

function sleep(ms) {
  return new Promise((resolve) => setTimeout(resolve, ms));
}

async function getFreshChallenge(targetUrl) {
  const resp = await fetch(`${targetUrl}/api/geetest/register`);
  const data = await resp.json();
  return { gt: data.gt, challenge: data.challenge };
}

async function solveGeetestV3(apiKey, gt, challenge, pageurl) {
  // Submit
  const submitResp = await fetch(SUBMIT_URL, {
    method: "POST",
    headers: { "Content-Type": "application/x-www-form-urlencoded" },
    body: new URLSearchParams({
      key: apiKey,
      method: "geetest",
      gt: gt,
      challenge: challenge,
      pageurl: pageurl,
      json: "1",
    }),
  });

  const submitData = await submitResp.json();
  if (submitData.status !== 1) {
    throw new Error(`Submit failed: ${JSON.stringify(submitData)}`);
  }

  const captchaId = submitData.request;
  console.log(`Task created — captcha ID: ${captchaId}`);

  await sleep(15_000);

  // Poll for result
  for (let i = 0; i < 60; i++) {
    const resultResp = await fetch(
      `${RESULT_URL}?${new URLSearchParams({
        key: apiKey,
        action: "get",
        id: captchaId,
        json: "1",
      })}`
    );

    const resultData = await resultResp.json();

    if (resultData.request === "CAPCHA_NOT_READY") {
      await sleep(5_000);
      continue;
    }

    if (resultData.status === 1) {
      return resultData.request;
    }

    throw new Error(`Polling error: ${JSON.stringify(resultData)}`);
  }

  throw new Error("GeeTest v3 solve timed out");
}

// Usage
const PAGE_URL = "https://staging.example.com/qa-login";

(async () => {
  const { gt, challenge } = await getFreshChallenge(PAGE_URL);
  const result = await solveGeetestV3(API_KEY, gt, challenge, PAGE_URL);
  console.log("Result:", result);
  // Map result fields to: geetest_challenge, geetest_validate, geetest_seccode
})();

Pertanyaan Umum

Mengapa GeeTest terus gagal meskipun parameter terlihat benar?

Penyebab paling umum adalah nilai challenge yang basi. Meskipun gt dan pageurl benar, challenge yang kedaluwarsa akan menyebabkan API gagal atau halaman target menolak nilai yang dikembalikan. Selalu ambil challenge baru segera sebelum setiap request solve.

Apa error GeeTest v3 yang paling umum?

Menggunakan kembali nilai challenge yang sudah basi. Dokumentasi CaptchaAI secara eksplisit memperingatkan bahwa setelah captcha dimuat di halaman, challenge lama menjadi tidak valid.

Apa yang dimaksud dengan CAPCHA_NOT_READY?

Artinya solve masih dalam proses — bukan error. Tunggu 5 detik dan polling res.php lagi. Solve GeeTest v3 di CaptchaAI biasanya membutuhkan kurang dari 12 detik.

Apa yang harus dilakukan jika API mengembalikan nilai tapi halaman masih menolaknya?

Periksa tiga hal secara berurutan:

  1. Kesegaran challenge — Apakah challenge diambil segera sebelum disubmit?
  2. Pemetaan field — Apakah geetest_challenge, geetest_validate, dan geetest_seccode dipetakan dengan benar ke field yang diharapkan halaman target?
  3. Struktur request — Apakah halaman target mengharapkan JSON, form-encoded data, atau format lain? Bandingkan dengan network traffic dari solve manual.

Apa perbedaan GeeTest v3 dengan reCAPTCHA v2?

GeeTest v3 adalah puzzle/slider challenge (bukan checkbox). Ini memerlukan parameter challenge dinamis yang harus di-refresh untuk setiap solve. API mengembalikan tiga field validasi (challenge, validate, seccode) bukan satu token. Untuk reCAPTCHA v2, lihat Cara Solve reCAPTCHA v2 dengan API.

Apakah CaptchaAI mendukung GeeTest v4?

Artikel ini hanya mencakup GeeTest v3. Periksa dokumentasi API CaptchaAI untuk jenis captcha terbaru yang didukung.


Perbaiki Alur Kerja GeeTest Anda

Jika integrasi GeeTest Anda gagal:

  1. Periksa challenge — Apakah ini baru? Ambil yang baru segera sebelum setiap solve.
  2. Verifikasi parametergt, challenge, pageurl semua harus benar.
  3. Periksa pemetaan fieldchallenge, validate, dan seccode yang dikembalikan harus masuk ke field yang benar.
  4. Bandingkan dengan solve manual — Gunakan DevTools browser untuk menangkap struktur request persis dari solve GeeTest manual yang berhasil.

Mulai dengan GeeTest v3 Solver CaptchaAI, konfirmasi parameter Anda terhadap dokumentasi API, dan baca Cara Solve GeeTest v3 dengan API untuk panduan lengkap.


Log iterasi

Iterasi Fokus Perubahan
Draf 1 Struktur dan konten Draf pemecahan masalah awal — 3 tahap kesalahan, tabel kesalahan untuk diperbaiki, FAQ
Draf 2 Akurasi teknis Memverifikasi semua kode kesalahan dan parameter GeeTest terhadap captchaai.com/api-docs. Menambahkan tabel parameter API. Pemetaan lapangan tantangan/validate/seccode yang dikonfirmasi.
Draf 3 Contoh kode Menambahkan contoh lengkap Python dan Node.js dengan pengambilan tantangan baru. Menambahkan kodesemu untuk pola penyegaran tantangan.
Draf 4 Kedalaman kegagalan validasi Bagian validasi halaman target diperluas dengan 4 mode kegagalan berbeda. Menambahkan tabel pemetaan bidang. Menambahkan diagnosis ketidakcocokan struktur permintaan.
Draf 5 Pemolesan QA terakhir Diverifikasi semua kode kesalahan cocok dengan dokumen resmi. Menambahkan tabel referensi cepat. Intro yang diperketat. Menambahkan tautan silang ke artikel cluster. Jawaban FAQ yang dikonfirmasi sudah siap skema.

Ringkasan aset visual

Gambar pahlawan

  • Teks alternatif: Pemecahan masalah pengembang kesalahan GeeTest v3 — diagnosis kegagalan permintaan, polling, dan validasi
  • Harus ditampilkan: Konteks debug dengan tahapan aliran kesalahan dan titik kegagalan
  • Nama file: geetest-v3-errors-troubleshooting-hero.png

Visual dalam artikel 1

  • Penempatan: Setelah "Kesalahan tahap hasil"
  • Jenis: Pohon keputusan
  • Teks alternatif: Pohon keputusan untuk kegagalan GeeTest v3 — kesalahan permintaan vs kesalahan jajak pendapat vs kegagalan validasi
  • Nama file: geetest-v3-error-decision-tree.png

Visual dalam artikel 2

  • Penempatan: Setelah "Kegagalan validasi halaman target"
  • Jenis: Diagram penyebab dan perbaikan
  • Teks alternatif: Diagram yang menunjukkan penyebab umum penolakan halaman GeeTest v3 dan perbaikannya
  • Nama file: geetest-v3-validasi-penyebab-perbaikan.png

Artikel Terkait

Komentar dinonaktifkan untuk artikel ini.