Khắc Phục Sự Cố

Thử thách Cloudflare vs Turnstile: Cách phát hiện cái nào bạn có

Sử dụng sai phương pháp CaptchaAI để bảo vệ Cloudflare là một trong những lỗi phổ biến nhất. Cloudflare Challenge và Cloudflare Turnstile trông giống nhau nhưng về cơ bản thì khác nhau. Gửi turnstile khi trang web sử dụng thử thách toàn trang — hoặc ngược lại — sẽ luôn không thành công.


Hai loại bảo vệ Cloudflare

tính năng Cloudflare Challenge Cloudflare Turnstile
Loại Quảng cáo xen kẽ toàn trang Tiện ích nhúng
Ngoại hình Chặn toàn bộ trang, "Kiểm tra trình duyệt của bạn" Hộp kiểm nhỏ hoặc tiện ích vô hình trong biểu mẫu
Phương pháp CaptchaAI cloudflare_challenge turnstile
Trở về Bánh quy <staging-session-cookie> Chuỗi mã thông báo
Yêu cầu proxy Có (bắt buộc) Được đề xuất
Yêu cầu tác nhân người dùng Có (bắt buộc) Không

Cách nhận biết Cloudflare Challenge

Cloudflare Challenge là quảng cáo chuyển tiếp toàn trang chặn quyền truy cập vào nội dung. Bạn nhìn thấy nó trước khi tải trang thực tế.

Dấu hiệu trực quan:

  • Thông báo "Kiểm tra trình duyệt của bạn trước khi truy cập..."
  • Vòng quay tải Cloudflare
  • Tiêu đề trang có chứa "Chỉ một chút..."
  • URL vẫn giữ nguyên nhưng nội dung là trang Cloudflare

Dấu hiệu HTML:

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

Phát hiện theo chương trình:

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")

Cách nhận biết Cloudflare Turnstile

Turnstile là tiện ích được nhúng bên trong một trang đã được tải. Nó xuất hiện trong các biểu mẫu, như reCAPTCHA.

Dấu hiệu trực quan:

  • Tiện ích Cloudflare nhỏ trong một biểu mẫu (kiểu hộp kiểm)
  • Phần còn lại của nội dung trang được hiển thị
  • Widget nói "Xác minh bạn là con người"

Dấu hiệu 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>

Phát hiện theo chương trình:

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")

Chức năng phát hiện kết hợp

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']}")

Giải quyết từng loại

Cloudflare Challenge:

data = {
    "key": "YOUR_API_KEY",
    "method": "cloudflare_challenge",
    "pageurl": "https://example.com",
    "proxy": "host:port:user:pass",   # MANDATORY
    "proxytype": "HTTP",               # MANDATORY
    "userAgent": "Mozilla/5.0 ...",    # MANDATORY
    "json": 1
}
# Returns <staging-session-cookie> cookie — set it in your session

Cloudflare Turnstile:

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

Những lỗi thường gặp

sai lầm kết quả sửa chữa
Sử dụng turnstile cho trang Thử thách ERROR_CAPTCHA_UNSOLVABLE Chuyển sang cloudflare_challenge
Sử dụng cloudflare_challenge cho Cloudflare Turnstile Định dạng phản hồi sai Chuyển sang turnstile
Không có proxy cho Thử thách ERROR_PROXY_NOT_AUTHORIZED Thêm proxy - bắt buộc đối với Thử thách
Không có khóa trang web cho Turnstile ERROR_BAD_PARAMETERS Trích xuất khóa trang web từ trang HTML

Câu hỏi thường gặp

Một trang web có thể sử dụng cả Thử thách và Cloudflare Turnstile không?

Vâng. Một trang web có thể sử dụng Cloudflare Challenge khi truy cập lần đầu và Turnstile trong biểu mẫu đăng nhập của nó. Bạn cần giải quyết cả hai theo trình tự.

Tại sao Thử thách yêu cầu proxy nhưng Turnstile thì không?

Thử thách trả về cookie <staging-session-cookie> được liên kết với IP. CaptchaAI phải sử dụng proxy của bạn để tạo cookie hoạt động từ IP của bạn. Turnstile trả về mã thông báo độc lập với IP.

Điều gì sẽ xảy ra nếu kết quả phát hiện là "không" nhưng tôi vẫn thấy Cloudflare?

Một số biện pháp bảo vệ của Cloudflare chỉ kích hoạt đối với các hành động cụ thể (yêu cầu POST, lệnh gọi API) hoặc đối với một số Tác nhân người dùng nhất định. Hãy thử truy cập URL bằng Tác nhân người dùng giống bot để kích hoạt thử thách.


Giải CAPTCHA của Cloudflare bằng CaptchaAI

Xử lý cả Thử thách và Cloudflare Turnstile tạicaptchaai.com.


Hướng dẫn liên quan

Os comentários estão desativados para este artigo.