Khi Cloudflare gắn cờ một khách truy cập là đáng ngờ, nó sẽ phục vụ một trang thử thách xen kẽ. Sau khi giải quyết xong, trình duyệt sẽ nhận được cookie <staging-session-cookie> cấp quyền truy cập cho phiên. Hướng dẫn này giải thích cách hoạt động của luồng thử thách và cách CaptchaAI xử lý nó.
Cách các trang Cloudflare Challenge hoạt động
- Người dùng yêu cầu trang được bảo vệ bởi Cloudflare
- Cloudflare đánh giá các tín hiệu rủi ro (danh tiếng IP, tiêu đề, dấu vân tay TLS)
- Nếu bị gắn cờ, Cloudflare sẽ trả về 403 hoặc 503 với trang thử thách JavaScript
- Trang thử thách chạy kiểm tra trình duyệt và có thể hiển thị tiện ích Turnstile
- Khi thành công, Cloudflare đặt
<staging-session-cookie>và chuyển hướng đến URL gốc - Các yêu cầu tiếp theo với cookie được chuyển tiếp mà không gặp thách thức nào
Cookie
| Tài sản | Chi tiết |
|---|---|
| Tên | <staging-session-cookie> |
| Tên miền | Tên miền trang web mục tiêu (ví dụ: .example.com) |
| Đường dẫn | / |
| Trọn đời | Thông thường từ 30 phút đến 24 giờ |
| Chỉ http | Có |
| An toàn | Có (chỉ HTTPS) |
| Cùng trang web | không có |
Cookie được gắn với một số yếu tố:
- Địa chỉ IP — Việc sử dụng cookie từ một IP khác thường không thành công
- User-Agent — Phải khớp với UA được sử dụng trong quá trình giải quyết thử thách
- Dấu vân tay TLS — Một số cấu hình liên kết với TLS ClientHello
Các loại thử thách
Cloudflare phục vụ các cấp độ thử thách khác nhau:
| Thử thách | Mã phản hồi | Tương tác người dùng | Mô tả |
|---|---|---|---|
| Thử thách JS | 503 | không có | Chỉ thực thi JavaScript |
| Thử thách được quản lý | 403 | Có lẽ | Cloudflare quyết định - có thể hiển thị Turnstile hoặc vượt qua một cách im lặng |
| Thử thách tương tác | 403 | Có | Luôn hiển thị tiện ích Turnstile |
CaptchaAI giải quyết cả ba loại thông qua bộ giải Cloudflare Challenge.
Giải quyết bằng CaptchaAI
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)}...`);
Sử dụng mã thông báo đã giải quyết
Sau khi giải xong, hãy đưa mã thông báo vào trang thử thách để nhận <staging-session-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()
<staging-session-cookie> = next(
(c for c in cookies if c['name'] == '<staging-session-cookie>'), None
)
if <staging-session-cookie>:
print(f"<staging-session-cookie>: {<staging-session-cookie>['value'][:30]}...")
Tái sử dụng cookie
session = requests.Session()
session.cookies.set("<staging-session-cookie>", <staging-session-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
Tuổi thọ của cookie và làm mới
Cookie <staging-session-cookie> hết hạn. Phương án giải quyết lại:
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"] == "<staging-session-cookie>"), None)
if is_cookie_valid(cf):
return cf["value"]
# Re-solve
token = solve_func(target_url)
# ... inject and extract new cookie
Khắc phục sự cố
| Vấn đề | Nguyên nhân | Cách xử lý |
|---|---|---|
| Cookie bị từ chối sau khi giải quyết | IP không khớp | Sử dụng cùng một proxy để giải quyết và yêu cầu |
| Cookie hết hạn nhanh chóng | TTL ngắn được đặt theo trang web | Giải quyết lại trước khi hết hạn; kiểm tra trường expiry |
| 403 mặc dù cookie hợp lệ | Tác nhân người dùng không khớp | So khớp UA giữa các phiên giải quyết và yêu cầu |
| Trang thử thách không tải | Đã tắt JavaScript | Sử dụng trình duyệt đầy đủ (Selenium, Puppeteer) |
Câu hỏi thường gặp
Tôi có thể chia sẻ giữa các máy khác nhau không?
Chỉ khi họ có chung IP và bạn khớp chuỗi Tác nhân người dùng. Cloudflare thường liên kết cookie với IP gốc.
kéo dài bao lâu?
Thông thường từ 30 phút đến 24 giờ, tùy thuộc vào cấu hình Cloudflare của chủ sở hữu trang web.
Giải quyết các trang Cloudflare Challenge với CaptchaAI
Nhận khóa API của bạn tạicaptchaai.com.
Hướng dẫn liên quan
- Trích xuất khóa trang web Cloudflare Turnstile
- Cloudflare Turnstile so với hCaptcha và reCAPTCHA
- Cookie để có tỷ lệ giải quyết tốt hơn