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
challengedan 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:
- Kesegaran challenge — Apakah
challengediambil segera sebelum disubmit? - Pemetaan field — Apakah
geetest_challenge,geetest_validate, dangeetest_seccodedipetakan dengan benar ke field yang diharapkan halaman target? - 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:
- Periksa challenge — Apakah ini baru? Ambil yang baru segera sebelum setiap solve.
- Verifikasi parameter —
gt,challenge,pageurlsemua harus benar. - Periksa pemetaan field —
challenge,validate, danseccodeyang dikembalikan harus masuk ke field yang benar. - 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
- Selesaikan Geetest V3 Nodejs
- Memecahkan Geetest V3 Nodejs Captchaai
- Kesalahan dan Perbaikan Captcha Gambar Grid Umum