Comparisons

Solve CAPTCHA Berbasis Token vs Berbasis Cookie — Perbandingan

Anda tidak benar-benar memilih antara token dan cookie — proteksi di situs target yang menentukan. Widget reCAPTCHA atau Turnstile menghasilkan token sekali pakai yang harus ikut terkirim bersama form; halaman Cloudflare Challenge menghasilkan cookie sesi yang berlaku untuk banyak request sesudahnya.

Yang Anda pilih hanyalah cara mengintegrasikannya.

Kenali dulu bentuk proteksinya

Pertanyaan pertama: penghalangnya widget di dalam form, atau halaman perantara sebelum konten?

Skenario Alur Alasannya
Form login dengan reCAPTCHA v2 Token Token ikut sebagai field form
Crawl situs di balik Cloudflare Challenge Cookie Sekali selesai, ratusan halaman
Form yang dilindungi Turnstile Token Isi cf-turnstile-response sebelum POST
API di belakang Cloudflare Cookie Satu cookie untuk semua endpoint
Banyak form berbeda Token per submit Setiap token sekali pakai
Pengambilan data massal satu domain Cookie Jalan sampai cookie habis

Ringkas perbedaan teknisnya:

Aspek Alur token Alur cookie
Hasil penyelesaian String token (500+ karakter) Cookie browser (qa_validation_cookie)
Muncul pada reCAPTCHA v2/v3, Turnstile, hCaptcha Cloudflare Challenge, JS Challenge
Cara memakainya Ditempel ke field form Dikirim ulang di tiap request
Masa berlaku 60–120 detik 30 menit hingga 24 jam
Bisa dipakai ulang Tidak, sekali pakai Ya, selama sesi hidup
Butuh browser Saat ambil sitekey Saat menyelesaikan tantangan

Alur token: satu solve untuk satu submit

Lima langkah baku

  1. Ambil sitekey dari sumber halaman — polanya dibahas di cara membaca parameter reCAPTCHA.
  2. Kirim sitekey dan URL halaman ke in.php.
  3. Simpan task ID, lalu polling res.php sampai siap.
  4. Tempel token ke field tersembunyi milik widget.
  5. Kirim form segera.

Field token per tipe CAPTCHA

  • reCAPTCHA v2 — token masuk ke textarea g-recaptcha-response.
  • reCAPTCHA v3 — field yang sama, tetapi Anda juga mengirim action; untuk sitekey Enterprise tambahkan enterprise=1.
  • Turnstile — token masuk ke cf-turnstile-response.
  • hCaptcha — token masuk ke h-captcha-response. Tipe ini tidak termasuk yang diselesaikan CaptchaAI.

Contoh Python: solve, lalu POST tanpa browser

import requests
import time

API_KEY = "YOUR_API_KEY"

# 1. Solve
resp = requests.post("https://ocr.captchaai.com/in.php", data={
    "key": API_KEY,
    "method": "userrecaptcha",
    "googlekey": "6Le-wvkSAAAAAPBMR...",
    "pageurl": "https://staging.example.com/qa-login",
    "json": "1",
}).json()
task_id = resp["request"]

# 2. Poll
token = None
for _ in range(24):
    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["status"] == 1:
        token = result["request"]
        break

# 3. Submit form with token (no browser needed)
form_response = requests.post("https://staging.example.com/qa-login", data={
    "email": "user@example.com",
    "password": "password",
    "g-recaptcha-response": token,
})

Konsekuensi praktis

  • Submit tidak butuh browser. Token cukup ditempel ke body POST.
  • Umurnya pendek. Jangan sisipkan antrean antara token diterima dan form dikirim.
  • Sekali pakai. Tiap submit butuh token baru, dan tiap token memakai satu thread.
  • Validasi ada di server situs target. Token yang telat dikirim ikut ditolak.
  1. Halaman tantangan muncul sebelum konten asli.
  2. Browser menyelesaikan tantangan — pada banyak konfigurasi, Turnstile berjalan di dalamnya.
  3. Server menetapkan cookie sesi, misalnya qa_validation_cookie.
  4. Request berikutnya yang membawa cookie langsung diteruskan ke konten.

Sebagian aturan WAF memakai pola yang sama.

from selenium import webdriver
import requests
import time

# 1. Solve the challenge in a browser
driver = webdriver.Chrome()
driver.get("https://example.com/protected")

# Wait for challenge to complete (manually or with CaptchaAI)
time.sleep(10)  # Or use CaptchaAI pengaturan token

# 2. Extract cookies from browser
cookies = driver.get_cookies()
qa_validation_cookie = next(
    (c for c in cookies if c["name"] == "qa_validation_cookie"), None
)
user_agent = driver.execute_script("return navigator.userAgent")
driver.quit()

# 3. Use cookies for subsequent requests (no browser needed)
session = requests.Session()
session.headers.update({"User-Agent": user_agent})

for cookie in cookies:
    session.cookies.set(cookie["name"], cookie["value"])

# All requests now pass the challenge
for page in range(1, 50):
    resp = session.get(f"https://example.com/api/data?page={page}")
    print(f"Page {page}: {resp.status_code}")
  • Terikat IP. Cookie melekat pada IP penyelesai; egress jaringan lain membuatnya tidak berlaku.
  • Terikat User-Agent. Header User-Agent di sesi requests harus sama persis dengan browser tadi.
  • Ada masa berlaku. Perlakukan 403 mendadak sebagai sinyal solve ulang, bukan error fatal.
  • Browser hanya perlu di tahap pertama; sesudah itu murni HTTP.

Ketika satu halaman memakai dua-duanya

Kombinasi ini lumrah: halaman Cloudflare Challenge (cookie) melindungi form yang masih memuat reCAPTCHA (token). Urutannya tidak bisa dibalik — sesi lolos dulu, baru sitekey terbaca.

# Step 1: Get past Cloudflare (cookie)
session = get_cf_clearance_session("https://example.com")

# Step 2: Load the form (using the cookie session)
html = session.get("https://example.com/submit").text
sitekey = extract_sitekey(html)

# Step 3: Solve reCAPTCHA (token)
token = solve_recaptcha(sitekey, "https://example.com/submit")

# Step 4: Submit form (cookie + token)
resp = session.post("https://example.com/submit", data={
    "data": "value",
    "g-recaptcha-response": token,
})

Biaya dan thread untuk beban nyata

Contoh dari keseharian di sini: agensi price monitoring di Jakarta memantau 40.000 halaman katalog per hari di balik Cloudflare Challenge, sekaligus mengisi puluhan form QA klien ber-reCAPTCHA v2. Sisi katalog cukup beberapa puluh penyelesaian per hari; sisi form butuh satu penyelesaian per submit.

CaptchaAI menagih per thread bersamaan, bukan per solve, jadi yang dihitung adalah penyelesaian berbarengan di jam sibuk. Beban seperti itu umumnya nyaman di STANDARD ($30/bulan, 15 thread); begitu form QA dijalankan paralel, ADVANCE ($90/bulan, 50 thread) memberi ruang lega. Menaikkan paket berarti membeli konkurensi, bukan kuota.

Dekatkan worker ke target — ap-southeast-3 (Jakarta) atau ap-southeast-1 (Singapura) — karena satu putaran bolak-balik terasa saat token hidup 60 detik. Catatan kepatuhan: ambil hanya data yang boleh Anda proses, sesuai UU 27/2022 tentang Pelindungan Data Pribadi.

Pertanyaan umum

Berapa lama waktu saya setelah token diterima?

Sekitar 60–120 detik, tergantung widget. Pakai seketika; jangan disimpan di antrean atau dipakai untuk coba ulang.

Hampir selalu karena IP atau User-Agent berubah. Salin User-Agent dari browser yang menyelesaikan tantangan dan pastikan request keluar lewat egress yang sama.

Tahap penyelesaiannya tetap perlu browser. Sesudah itu cukup klien HTTP biasa — itulah yang membuatnya ekonomis untuk volume besar.

Berapa thread yang saya perlukan untuk alur token?

Hitung dari penyelesaian yang berjalan bersamaan, bukan total harian. Satu penyelesaian 15 detik dengan 4 form per menit cukup satu thread; 40 form per menit baru menuntut belasan thread.

Apakah hCaptcha juga bisa diselesaikan lewat CaptchaAI?

Tidak. hCaptcha dan FunCaptcha belum tersedia, sedangkan GeeTest v4 berstatus segera hadir. Yang tersedia: reCAPTCHA v2/v3 termasuk Enterprise, Cloudflare Turnstile dan Challenge, GeeTest v3, CAPTCHA gambar dan grid, BLS, plus CaptchaFox, Friendly Captcha, dan Lemin yang masih beta.

Mulai dari satu API key

Ambil API key Anda di captchaai.com, lalu uji kedua alur di staging sebelum masuk produksi.

Panduan terkait

Komentar dinonaktifkan untuk artikel ini.