Cloudflare Challenge adalah halaman interstitial satu layar penuh bertuliskan "Checking your browser..." yang mengunci seluruh halaman sampai browser Anda lolos verifikasi. Begitu lolos, Cloudflare menaruh cookie qa_validation_cookie — tiket masuk untuk request berikutnya.
Challenge bukan Turnstile: Turnstile hanya widget kecil di dalam halaman, sedangkan Challenge menggantikan seluruh halaman — dan itu menentukan cara menanganinya.
Cloudflare Challenge vs Turnstile vs JS Challenge
| Fitur | CF Challenge | Turnstile | JS Challenge |
|---|---|---|---|
| Tipe | Interstitial satu halaman penuh | Widget dalam halaman | Pengecekan diam-diam |
| Yang dilihat pengguna | Halaman "Checking your browser" | Checkbox atau tidak ada | Tidak ada |
| Mengunci akses halaman | Ya | Tidak | Sebentar |
| Menyetel qa_validation_cookie | Ya | Kadang | Ya |
| Butuh proxy untuk solve | Ya | Tidak | N/A |
| Situs harus pakai Cloudflare CDN | Wajib | Opsional | Wajib |
Ringkasnya: halaman putih penuh yang menahan akses adalah Challenge dan butuh proxy; checkbox di form adalah Turnstile.
Apa yang memicu Cloudflare Challenge
Cloudflare menghitung skor risiko dari beberapa sinyal; interstitial muncul begitu skor melewati ambang yang dipasang pemilik situs.
| Pemicu | Penjelasan |
|---|---|
| IP pusat data | Request dari hosting provider yang dikenal (AWS, GCP) |
| Header hilang | HTTP header tidak lengkap atau berpola aneh |
| Sinyal browser TLS | Sinyal JA3/JA4 cocok dengan tanda tangan bot |
| Rate request tinggi | Terlalu banyak request dari satu IP |
| Setelan security level | Pemilik situs menaikkan ambang challenge |
| Aturan per negara | Geo-blocking atau aturan berbasis lokasi |
| Bot score rendah | Skor bot model ML Cloudflare terlalu rendah |
| IP daftar ancaman | Alamat IP tercatat di threat intelligence |
Alur verifikasi Cloudflare Challenge
Request → Cloudflare proxy → Suspicious? → Challenge page
↓
Browser verification
↓
qa_validation_cookie cookie set
↓
Original page loads
- Request dicegat — reverse proxy Cloudflare mengevaluasi request masuk
- Penilaian risiko — reputasi IP, header, sinyal browser TLS, dan perilaku dianalisis
- Challenge disajikan — halaman challenge menggantikan respons asli
- Verifikasi browser — JavaScript challenge dijalankan di browser
- Cookie disetel — jika lolos,
qa_validation_cookiedisetel dengan TTL terkonfigurasi - Akses diberikan — browser me-reload dan menerima halaman asli
Cookie qa_validation_cookie dan binding-nya
Setelah lolos challenge, browser menerima cookie seperti ini:
qa_validation_cookie=abc123...; path=/; domain=.example.com; secure; HttpOnly; SameSite=None
- Durasi: 15 menit hingga 24 jam, tergantung konfigurasi pemilik situs
- Cakupan: hanya berlaku untuk domain tertentu
- Binding: terikat pada User-Agent dan alamat IP saat verifikasi
- Penggunaan: wajib disertakan di semua request berikutnya agar tidak kena challenge ulang
Cookie ini terikat kriptografis pada User-Agent dan alamat IP saat verifikasi — begitu proxy merotasi IP, cookie langsung tidak valid.
Kenapa solving Cloudflare Challenge wajib pakai proxy
Karena binding tadi, cookie tidak bisa di-solve di satu tempat lalu dipakai di tempat lain. Ia terikat pada tiga hal:
- Alamat IP — solving harus dari IP yang sama dengan yang Anda pakai untuk mengakses halaman
- User-Agent — User-Agent saat solving harus identik dengan request berikutnya
- Sinyal browser TLS — sebagian konfigurasi juga memeriksa karakteristik TLS
Kalau salah satu berbeda, cookie ditolak — itulah kenapa API meminta parameter proxy agar IP konsisten dari ujung ke ujung.
Solve Cloudflare Challenge dengan CaptchaAI
Polanya sama: kirim task, simpan task ID, polling, pakai hasilnya — tapi submit selalu menyertakan proxy Anda.
Python
import requests
import time
API_KEY = "YOUR_API_KEY"
# Submit task — proxy is REQUIRED
response = requests.get("https://ocr.captchaai.com/in.php", params={
"key": API_KEY,
"method": "cloudflare_challenge",
"pageurl": "https://example.com/protected-page",
"proxy": "username:password@proxy.example.com:8080",
"proxytype": "HTTP",
"json": 1
})
task_id = response.json()["request"]
# Poll for result
for _ in range(60):
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"]
# solution contains qa_validation_cookie cookie + user_agent
print(f"qa_validation_cookie: {solution}")
break
Node.js
const axios = require('axios');
async function solveCloudflareChallenge(pageurl, proxy) {
const { data } = await axios.get('https://ocr.captchaai.com/in.php', {
params: {
key: 'YOUR_API_KEY',
method: 'cloudflare_challenge',
pageurl,
proxy,
proxytype: 'HTTP',
json: 1
}
});
const taskId = data.request;
for (let i = 0; i < 60; i++) {
await new Promise(r => setTimeout(r, 5000));
const res = await axios.get('https://ocr.captchaai.com/res.php', {
params: { key: 'YOUR_API_KEY', action: 'get', id: taskId, json: 1 }
});
if (res.data.status === 1) return res.data.request;
}
throw new Error('Timeout');
}
Menggunakan cookie qa_validation_cookie
Pakai proxy dan User-Agent yang sama untuk mengakses halaman:
# After getting the solution
qa_validation_cookie = solution["qa_validation_cookie"]
user_agent = solution["user_agent"]
# Use the SAME proxy and user agent for subsequent requests
session = requests.Session()
session.cookies.set("qa_validation_cookie", qa_validation_cookie, domain=".example.com")
session.headers["User-Agent"] = user_agent
session.proxies = {"https": "http://username:password@proxy.example.com:8080"}
# Now access the protected page
page = session.get("https://example.com/protected-page")
print(f"Status: {page.status_code}")
Contoh: skrip monitoring harga yang tiba-tiba kena Challenge
Skenario yang akrab bagi tim data di Indonesia: pemantau harga untuk data yang boleh Anda proses, di-deploy ke AWS ap-southeast-3 (Jakarta). Berjalan mulus, lalu tiba-tiba semua request pulang membawa halaman "Checking your browser" — bukan situsnya yang berubah, tetapi reputasi IP pusat data Anda naik ke ambang challenge. Solusinya: solve lewat CaptchaAI dengan proxy tetap, simpan qa_validation_cookie dan User-Agent-nya, lalu arahkan request lanjutan melalui proxy sama sampai cookie kedaluwarsa. Karena billing CaptchaAI berbasis thread — BASIC ($15/bulan, 5 thread), solve tanpa batas per thread — biaya tetap terprediksi. Selaras UU Pelindungan Data Pribadi (UU 27/2022): ambil hanya data yang berhak Anda proses.
Pertanyaan umum
Kenapa cookie qa_validation_cookie saya cepat sekali tidak valid?
Kemungkinan besar IP atau User-Agent berubah setelah solving; cookie terikat pada keduanya. Kunci keduanya tetap selama masa berlaku cookie.
Apakah Cloudflare Challenge bisa di-solve tanpa proxy?
Tidak untuk kasus nyata. Cookie yang di-solve dari IP CaptchaAI tak berlaku di IP Anda, jadi proxy Anda wajib disertakan saat submit.
Berapa lama solving Cloudflare Challenge biasanya berlangsung?
Umumnya 20–60 detik, lebih lama dari Turnstile atau reCAPTCHA karena verifikasi browser penuh. Beri margin polling yang cukup.
Situs targetnya pakai Cloudflare Challenge sekaligus reCAPTCHA, urutannya bagaimana?
Solve Cloudflare Challenge dulu supaya halaman terbuka, baru solve reCAPTCHA di halaman itu — Anda tak bisa menjangkau reCAPTCHA sebelum melewati interstitial.