Explainers

Panduan Cookie Cloudflare Challenge qa_validation_cookie

Satu cookie yang menentukan apakah request otomatis Anda diloloskan atau dilempar kembali ke halaman challenge: cookie qa_validation_cookie milik Cloudflare Challenge. Selama cookie itu valid dan cocok dengan IP serta User-Agent yang Anda pakai, sesi scraping berjalan mulus; begitu kedaluwarsa, Cloudflare menahan Anda lagi. Panduan ini membedah properti cookie tersebut, faktor apa saja yang mengikatnya, dan cara CaptchaAI menyelesaikan challenge untuk mendapatkannya.


Sebelum menyentuh kode, pahami dulu urutan kejadiannya. Cloudflare tidak langsung memblokir — ia menaruh satu lapisan pemeriksaan di depan halaman:

  1. Browser meminta halaman yang dilindungi Cloudflare
  2. Cloudflare menilai sinyal risiko (reputasi IP, header request, TLS sinyal browser)
  3. Jika ditandai mencurigakan, Cloudflare membalas 403 atau 503 berisi halaman challenge JavaScript
  4. Halaman challenge menjalankan pemeriksaan browser dan bisa menampilkan widget Turnstile
  5. Setelah berhasil, Cloudflare menetapkan cookie qa_validation_cookie lalu redirect ke URL awal
  6. Request berikutnya yang membawa cookie tersebut lolos tanpa challenge

Intinya, seluruh alur ini bertujuan menerbitkan satu cookie. Setelah cookie ada di tangan, sisa sesi Anda tinggal membawanya di setiap request.


Tiga tingkat challenge yang perlu Anda kenali

Cloudflare tidak menyajikan satu challenge seragam. Ada tiga tingkat, dan tiap tingkat berperilaku berbeda:

Challenge Kode respons Interaksi pengguna Deskripsi
JS Challenge 503 Tidak ada Eksekusi JavaScript saja
Managed Challenge 403 Mungkin Cloudflare memutuskan — mungkin menampilkan Turnstile atau lolos diam-diam
Interactive Challenge 403 Ya Selalu menampilkan widget Turnstile

CaptchaAI menyelesaikan ketiga tingkat tersebut lewat solver Cloudflare Challenge, jadi Anda tidak perlu mendeteksi sendiri tingkat mana yang sedang dilayani situs target.


Setelah challenge lolos, inilah cookie yang Anda dapat:

Properti Detail
Nama qa_validation_cookie
Domain Domain situs target (mis. .example.com)
Path /
Lifetime Biasanya 30 menit hingga 24 jam
HttpOnly Ya
Secure Ya (hanya HTTPS)
SameSite None

Yang sering membuat cookie ditolak bukan cookie-nya sendiri, melainkan konteks pemakaiannya. Cookie terikat ke beberapa faktor sekaligus:

  • Alamat IP — memakai cookie dari IP berbeda biasanya gagal
  • User-Agent — harus cocok dengan UA yang dipakai saat solve challenge
  • TLS sinyal browser — sebagian konfigurasi mengikat cookie ke TLS ClientHello

Artinya, cookie bukan tiket bebas yang bisa dipindah-pindah. Ia hanya berlaku dalam kombinasi IP + User-Agent (dan kadang TLS) yang sama seperti saat diterbitkan.


Solve Cloudflare Challenge dengan CaptchaAI

Polanya mengikuti empat langkah yang sama seperti tipe CAPTCHA lain:

  1. Kirim task ke in.php
  2. Simpan task ID yang dikembalikan
  3. Polling hasil di res.php
  4. Pakai token yang diterima

Python

import requests
import time

API_KEY = "YOUR_API_KEY"
TARGET_URL = "https://example.com/protected-page"

# Submit Cloudflare Challenge task
resp = requests.post("https://ocr.captchaai.com/in.php", data={
    "key": API_KEY,
    "method": "turnstile",
    "sitekey": "0x0000000000000000000000",  # may be generic for CF challenge
    "pageurl": TARGET_URL,
    "json": "1",
}).json()

if resp["status"] != 1:
    raise Exception(f"Submit error: {resp['request']}")

task_id = resp["request"]
print(f"Task ID: {task_id}")

# Poll for result
for _ in range(30):
    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"]
        print(f"Token received: {token[:50]}...")
        break
    if result["request"] != "CAPCHA_NOT_READY":
        raise Exception(f"Error: {result['request']}")

JavaScript

const axios = require('axios');

const API_KEY = 'YOUR_API_KEY';
const TARGET_URL = 'https://example.com/protected-page';

const submit = await axios.post('https://ocr.captchaai.com/in.php', null, {
  params: {
    key: API_KEY,
    method: 'turnstile',
    sitekey: '0x0000000000000000000000',
    pageurl: TARGET_URL,
    json: 1,
  }
});
const taskId = submit.data.request;

// Poll
let token = null;
for (let i = 0; i < 30; i++) {
  await new Promise(r => setTimeout(r, 5000));
  const poll = await axios.get('https://ocr.captchaai.com/res.php', {
    params: { key: API_KEY, action: 'get', id: taskId, json: 1 }
  });
  if (poll.data.status === 1) {
    token = poll.data.request;
    break;
  }
}
console.log(`Token: ${token.substring(0, 50)}...`);

Token dari solver belum menjadi cookie. Anda masih perlu menyuntikkannya ke halaman challenge supaya Cloudflare menerbitkan qa_validation_cookie:

# With Selenium
from selenium import webdriver

driver = webdriver.Chrome()
driver.get(TARGET_URL)  # Load the challenge page

# Inject token into Turnstile response field
driver.execute_script("""
    const input = document.querySelector('input[name="cf-turnstile-response"]');
    if (input) input.value = arguments[0];

    // Trigger form submit or callback
    const form = document.querySelector('form');
    if (form) form.submit();
""", token)

# Wait for redirect and extract cookies
import time
time.sleep(3)
cookies = driver.get_cookies()
qa_validation_cookie = next(
    (c for c in cookies if c['name'] == 'qa_validation_cookie'), None
)
if qa_validation_cookie:
    print(f"qa_validation_cookie: {qa_validation_cookie['value'][:30]}...")

Setelah cookie ada di tangan, Anda tidak perlu membuka browser penuh untuk setiap request. Cukup bawa cookie plus User-Agent yang sama di sesi HTTP biasa:

session = requests.Session()
session.cookies.set("qa_validation_cookie", qa_validation_cookie["value"], domain=".example.com")
session.headers.update({
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
})

# Now access protected pages
resp = session.get("https://example.com/api/data")
print(resp.status_code)  # 200

Cookie qa_validation_cookie punya masa berlaku terbatas dan pasti kedaluwarsa. Rancang alur agar cookie di-solve ulang otomatis sebelum habis, bukan setelah request gagal:

import datetime

def is_cookie_valid(cookie):
    if not cookie:
        return False
    expiry = cookie.get("expiry", 0)
    return datetime.datetime.now().timestamp() < expiry - 60  # 60s buffer

def get_or_refresh_clearance(driver, target_url, solve_func):
    cookies = driver.get_cookies()
    cf = next((c for c in cookies if c["name"] == "qa_validation_cookie"), None)
    if is_cookie_valid(cf):
        return cf["value"]

    # Re-solve
    token = solve_func(target_url)
    # ... inject and extract new cookie

Buffer 60 detik pada contoh di atas memberi ruang agar solve ulang selesai sebelum cookie lama benar-benar mati, sehingga tidak ada request yang jatuh di tengah sesi.


Konteks untuk tim automation dan QA di Indonesia

Banyak pekerjaan scraping dan QA di Indonesia dikerjakan tim kecil serta kontraktor freelance yang sangat sensitif terhadap biaya. Di sinilah model harga berbasis thread CaptchaAI terasa pas: Anda membayar per thread yang berjalan bersamaan, bukan per solve. Paket BASIC ($15/bulan, 5 thread) cukup untuk satu worker scraper, sedangkan ADVANCE ($90/bulan, 50 thread) menopang crawler paralel yang harus me-refresh banyak cookie qa_validation_cookie sekaligus — biayanya tetap berapa pun jumlah challenge yang diselesaikan.

Karena cookie terikat ke IP, jaga egress jaringan Anda tetap konsisten. Kalau worker di-deploy di ap-southeast-1 (Singapura) atau ap-southeast-3 (Jakarta), pastikan proses solve dan request berjalan lewat rute jaringan yang sama supaya Cloudflare tidak menolak cookie karena IP berbeda. Kondisi jaringan mobile-first juga membuat buffer solve ulang menjadi lebih penting, bukan sekadar formalitas.

Satu catatan kepatuhan: di bawah UU Pelindungan Data Pribadi (UU 27/2022), olah hanya data yang memang berhak Anda proses dan patuhi aturan perlindungan data pribadi.


Mengatasi masalah yang sering muncul

Masalah Penyebab Solusi
Cookie ditolak setelah di-solve IP mismatch Gunakan proxy yang sama untuk solving dan request
Cookie kedaluwarsa cepat TTL pendek diatur situs Solve ulang sebelum kedaluwarsa; periksa field expiry
403 meskipun cookie valid User-Agent mismatch Cocokkan UA antara sesi solve dan request
Halaman challenge tidak dimuat JavaScript dinonaktifkan Gunakan browser lengkap (Selenium, Puppeteer)

Pola yang terlihat di tabel ini konsisten: hampir semua kegagalan berakar pada ketidakcocokan konteks (IP atau User-Agent), bukan pada cookie yang salah.


Pertanyaan umum

Apakah CaptchaAI benar-benar menyelesaikan Cloudflare Challenge, bukan cuma Turnstile biasa?

Ya. Selain widget Cloudflare Turnstile, solver Cloudflare Challenge menangani JS Challenge, Managed Challenge, dan Interactive Challenge. hCaptcha dan FunCaptcha berada di luar cakupan dan belum didukung.

Umumnya ya. Cloudflare kerap mengikat cookie ke IP asal dan User-Agent. Jalankan solve dan request melalui rute jaringan yang sama, lalu samakan string User-Agent-nya.

Tergantung berapa banyak cookie yang kedaluwarsa bersamaan. Satu worker cukup dengan BASIC ($15/bulan, 5 thread); crawler paralel yang menyegarkan puluhan cookie sekaligus lebih nyaman di ADVANCE ($90/bulan, 50 thread).

Hanya jika mesin-mesin itu berbagi IP yang sama dan memakai User-Agent identik. Tanpa keduanya, Cloudflare akan menolak cookie dan memunculkan challenge lagi.


Panduan terkait

Komentar dinonaktifkan untuk artikel ini.