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
- Ambil sitekey dari sumber halaman — polanya dibahas di cara membaca parameter reCAPTCHA.
- Kirim sitekey dan URL halaman ke
in.php. - Simpan task ID, lalu polling
res.phpsampai siap. - Tempel token ke field tersembunyi milik widget.
- 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 tambahkanenterprise=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.
Alur cookie: satu solve untuk ratusan request
Bagaimana cookie sesi terbentuk
- Halaman tantangan muncul sebelum konten asli.
- Browser menyelesaikan tantangan — pada banyak konfigurasi, Turnstile berjalan di dalamnya.
- Server menetapkan cookie sesi, misalnya
qa_validation_cookie. - Request berikutnya yang membawa cookie langsung diteruskan ke konten.
Sebagian aturan WAF memakai pola yang sama.
Contoh Python: pindahkan cookie ke sesi requests
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}")
Kenapa cookie tiba-tiba berhenti bekerja
- Terikat IP. Cookie melekat pada IP penyelesai; egress jaringan lain membuatnya tidak berlaku.
- Terikat User-Agent. Header
User-Agentdi sesirequestsharus 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.
Kenapa cookie ditolak padahal belum kedaluwarsa?
Hampir selalu karena IP atau User-Agent berubah. Salin User-Agent dari browser yang menyelesaikan tantangan dan pastikan request keluar lewat egress yang sama.
Bisakah alur cookie berjalan tanpa browser sama sekali?
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.