Pemecahan Masalah

Cloudflare Challenge Loop: Mengapa Challenge Terus Berulang

Anda solve Cloudflare Challenge via CaptchaAI, mendapat cookie qa_validation_cookie, menyetelnya di sesi — dan halaman challenge muncul lagi. Loop ini terjadi saat cookie tidak cocok dengan konteks sesi. Berikut setiap penyebab dan cara memperbaikinya.


Saat CaptchaAI solve Cloudflare Challenge, ia mengembalikan cookie qa_validation_cookie. Cookie ini terikat pada:

  1. IP proxy yang digunakan selama solving
  2. User-Agent yang digunakan selama solving
  3. Domain situs target

Jika salah satu berbeda antara solving dan request berikutnya, Cloudflare menolak cookie dan menampilkan challenge lagi.


Penyebab 1: User-Agent Tidak Cocok

Penyebab paling umum. User-Agent yang Anda kirim ke CaptchaAI harus sama persis dengan User-Agent dalam request Anda.

import requests

USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"

# Step 1: Solve with the SAME User-Agent
solve_data = {
    "key": "YOUR_API_KEY",
    "method": "cloudflare_challenge",
    "pageurl": "https://example.com",
    "proxy": "host:port:user:pass",
    "proxytype": "HTTP",
    "userAgent": USER_AGENT,  # Must match step 2
    "json": 1
}
submit = requests.post("https://ocr.captchaai.com/in.php", data=solve_data).json()

# ... poll for result ...

# Step 2: Gunakan User-Agent YANG SAMA dalam request berikutnya
session = requests.Session()
session.headers["User-Agent"] = USER_AGENT  # Must match step 1
session.cookies.set("qa_validation_cookie", cf_clearance_value, domain=".example.com")
resp = session.get("https://example.com")

Penyebab 2: IP Proxy Tidak Cocok

Cookie qa_validation_cookie terikat pada IP yang men-solve challenge. Jika Anda request situs dari IP berbeda, cookie ditolak.

PROXY = "host:port:user:pass"

# Solve with this proxy
solve_data = {
    "key": "YOUR_API_KEY",
    "method": "cloudflare_challenge",
    "pageurl": "https://example.com",
    "proxy": PROXY,
    "proxytype": "HTTP",
    "userAgent": USER_AGENT,
    "json": 1
}

# Use the SAME proxy for subsequent requests
session.proxies = {
    "http": f"http://user:pass@host:port",
    "https": f"http://user:pass@host:port"
}

Penting: Jika menggunakan rotasi egress jaringan yang diotorisasi, sematkan ke sticky session. IP harus tetap sama antara solving dan browsing.


Cookie qa_validation_cookie harus di-set pada domain yang benar dengan atribut yang tepat.

# WRONG — setting on wrong domain
session.cookies.set("qa_validation_cookie", value, domain="example.com")

# CORRECT — include the dot prefix for subdomain coverage
session.cookies.set("qa_validation_cookie", value, domain=".example.com")

# Or set all cookies returned by CaptchaAI
for cookie_str in result.get("cookies", "").split(";"):
    if "qa_validation_cookie" in cookie_str:
        name, val = cookie_str.strip().split("=", 1)
        session.cookies.set(name.strip(), val.strip(), domain=".example.com")

Cookie qa_validation_cookie memiliki lifetime terbatas — biasanya 15–30 menit. Setelah kedaluwarsa, Cloudflare menampilkan challenge lagi.

Perbaikan: Lacak umur cookie dan solve ulang sebelum kedaluwarsa.

import time

last_solve_time = None
COOKIE_TTL = 900  # 15 minutes

def get_cf_clearance():
    global last_solve_time
    if last_solve_time and (time.time() - last_solve_time) < COOKIE_TTL:
        return  # Cookie still valid

    # Solve again
    qa_validation_cookie = solve_cloudflare_challenge()
    session.cookies.set("qa_validation_cookie", qa_validation_cookie, domain=".example.com")
    last_solve_time = time.time()

Penyebab 5: TLS sinyal browser Tidak Cocok

Cloudflare memeriksa TLS sinyal browser. Library requests Python memiliki TLS sinyal browser yang berbeda dari Chrome. Beberapa situs menolak request bahkan dengan qa_validation_cookie yang valid jika TLS sinyal browser tidak cocok.

Perbaikan: Gunakan curl_cffi atau tls-client untuk TLS sinyal browser seperti browser.

pip install curl_cffi
from curl_cffi import requests as curl_requests

session = curl_requests.Session(impersonate="chrome120")
session.cookies.set("qa_validation_cookie", value, domain=".example.com")
resp = session.get("https://example.com")

Checklist Debug

Challenge terus berulang
    ↓
User-Agent di solve request cocok dengan browsing request? → Tidak → Samakan User-Agent
    ↓ Ya
Proxy IP sama untuk solve dan browse? → Tidak → Pin proxy IP (sticky session)
    ↓ Ya
Cookie di-set di domain yang benar (.example.com)? → Tidak → Perbaiki domain
    ↓ Ya
Cookie kurang dari 15 menit? → Tidak → Solve ulang challenge
    ↓ Ya
TLS sinyal browser cocok browser? → Tidak → Gunakan curl_cffi atau tls-client
    ↓ Ya
Situs mungkin punya bot detection tambahan → Gunakan headless browser

Pertanyaan Umum

Biasanya 15–30 menit. Beberapa situs menetapkan durasi lebih pendek. Solve ulang secara proaktif sebelum kedaluwarsa.

Apakah saya perlu versi Chrome tertentu di User-Agent?

Gunakan User-Agent terkini dan realistis. User-Agent yang ketinggalan zaman memicu pemeriksaan Cloudflare lebih agresif.

Ya, selama berada di domain yang sama dan Anda menggunakan IP dan User-Agent yang sama.


Panduan Terkait

Komentar dinonaktifkan untuk artikel ini.