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
- Cách giải Cloudflare Turnstile bằng API
- Cách giải Cloudflare Challenge bằng API
- Cloudflare Turnstile 403 Sau khi sửa mã thông báo
- Tham khảo mã lỗi CaptchaAI