Pemecahan Masalah

Cloudflare Challenge vs Turnstile: Cara Mendeteksi

Menggunakan metode CaptchaAI yang salah untuk proteksi Cloudflare adalah salah satu kesalahan paling umum. Cloudflare Challenge dan Cloudflare Turnstile terlihat serupa tapi pada dasarnya berbeda. Mengirim turnstile saat situs menggunakan challenge full-page — atau sebaliknya — selalu gagal.


Dua Jenis Proteksi Cloudflare

Fitur Cloudflare Challenge Cloudflare Turnstile
Jenis Interstisial full-page Widget yang tertanam
Tampilan Memblokir seluruh halaman, "Checking your browser" Kotak centang kecil atau widget tak terlihat dalam form
Metode CaptchaAI cloudflare_challenge turnstile
Yang dikembalikan Cookie qa_validation_cookie String token
Perlu proxy Ya (wajib) Direkomendasikan
Perlu User-Agent Ya (wajib) Tidak

Cara Mengidentifikasi Cloudflare Challenge

Cloudflare Challenge adalah interstisial full-page yang memblokir akses ke konten. Anda melihatnya sebelum halaman sebenarnya dimuat.

Tanda visual:

  • Pesan "Checking your browser before accessing..."
  • Loading spinner Cloudflare
  • Judul halaman berisi "Just a moment..."
  • URL tetap sama tapi kontennya halaman Cloudflare

Tanda HTML:

<!-- Cloudflare Challenge page indicators -->
<title>Just a moment...</title>
<div id="challenge-running">...</div>
<div class="cf-browser-verification">...</div>

Deteksi terprogram:

import requests

resp = requests.get("https://example.com")

is_cf_challenge = (
    resp.status_code == 403 and
    "Just a moment" in resp.text or
    "cf-browser-verification" in resp.text or
    "challenge-platform" in resp.text
)

if is_cf_challenge:
    print("Cloudflare Challenge detected — use method: cloudflare_challenge")

Cara Mengidentifikasi Cloudflare Turnstile

Turnstile adalah widget yang tertanam di dalam halaman yang sudah dimuat. Widget ini muncul dalam form, seperti reCAPTCHA.

Tanda visual:

  • Widget Cloudflare kecil dalam form
  • Konten halaman lainnya terlihat
  • Widget bertuliskan "Verify you are human"

Tanda HTML:

<!-- Turnstile widget indicators -->
<div class="cf-turnstile" data-sitekey="0x4AAAAAAADnPIDROz1234"></div>

<!-- Or loaded via JavaScript -->
<script src="https://challenges.cloudflare.com/turnstile/v0/api.js"></script>

Deteksi terprogram:

import requests

resp = requests.get("https://staging.example.com/qa-login")

is_turnstile = (
    "cf-turnstile" in resp.text or
    "challenges.cloudflare.com/turnstile" in resp.text
)

if is_turnstile:
    # Extract sitekey
    if 'data-sitekey="' in resp.text:
        start = resp.text.index('data-sitekey="') + 14
        end = resp.text.index('"', start)
        sitekey = resp.text[start:end]
        print(f"Turnstile detected — sitekey: {sitekey}")
        print("Use method: turnstile")

Fungsi Deteksi Gabungan

def detect_cloudflare_type(url):
    """Detect which Cloudflare protection a URL uses."""
    resp = requests.get(url, allow_redirects=True)

    # Check for full-page Challenge
    if resp.status_code in [403, 503]:
        if any(marker in resp.text for marker in [
            "Just a moment",
            "cf-browser-verification",
            "challenge-platform",
            "challenge-running"
        ]):
            return {"type": "cloudflare_challenge", "method": "cloudflare_challenge"}

    # Check for embedded Turnstile
    if "cf-turnstile" in resp.text or "challenges.cloudflare.com/turnstile" in resp.text:
        sitekey = None
        if 'data-sitekey="' in resp.text:
            start = resp.text.index('data-sitekey="') + 14
            end = resp.text.index('"', start)
            sitekey = resp.text[start:end]
        return {"type": "turnstile", "method": "turnstile", "sitekey": sitekey}

    return {"type": "none", "method": None}


# Usage
result = detect_cloudflare_type("https://example.com")
print(f"Protection: {result['type']}")
print(f"CaptchaAI method: {result['method']}")

Cara Solve Masing-masing Jenis

Cloudflare Challenge:

data = {
    "key": "YOUR_API_KEY",
    "method": "cloudflare_challenge",
    "pageurl": "https://example.com",
    "proxy": "host:port:user:pass",   # WAJIB
    "proxytype": "HTTP",               # WAJIB
    "userAgent": "Mozilla/5.0 ...",    # WAJIB
    "json": 1
}
# Mengembalikan cookie qa_validation_cookie — set ke sesi Anda

Cloudflare Turnstile:

data = {
    "key": "YOUR_API_KEY",
    "method": "turnstile",
    "sitekey": "0x4AAAAAAADnPIDROz1234",
    "pageurl": "https://staging.example.com/qa-login",
    "json": 1
}
# Mengembalikan token — inject ke field cf-turnstile-response

Error Umum

Error Hasil Perbaikan
Menggunakan turnstile untuk halaman Challenge ERROR_CAPTCHA_UNSOLVABLE Ganti ke cloudflare_challenge
Menggunakan cloudflare_challenge untuk Turnstile Format respons salah Ganti ke turnstile
Tidak ada proxy untuk Challenge ERROR_PROXY_NOT_AUTHORIZED Tambahkan proxy — wajib untuk Challenge
Tidak ada sitekey untuk Turnstile ERROR_BAD_PARAMETERS Ekstrak sitekey dari HTML halaman

Pertanyaan Umum

Bisakah sebuah situs menggunakan Challenge dan Turnstile?

Ya. Sebuah situs mungkin menggunakan Cloudflare Challenge pada akses awal dan Turnstile dalam form login-nya. Anda harus solve keduanya secara berurutan.

Mengapa Challenge perlu proxy tapi Turnstile tidak?

Challenge mengembalikan cookie qa_validation_cookie yang terikat pada IP. CaptchaAI harus menggunakan proxy Anda untuk menghasilkan cookie yang berfungsi dari IP Anda. Turnstile mengembalikan token yang tidak bergantung pada IP.

Bagaimana jika deteksi menghasilkan "none" tapi saya masih melihat Cloudflare?

Beberapa proteksi Cloudflare hanya terpicu pada aksi tertentu (POST request, API call) atau untuk User-Agent tertentu. Coba akses URL dengan User-Agent bot-like untuk memicu challenge.


Panduan Terkait

Komentar dinonaktifkan untuk artikel ini.