Giải Cloudflare Challenge khó hơn hẳn reCAPTCHA hay Turnstile vì một yếu tố duy nhất: proxy, IP và user agent phải khớp nhau xuyên suốt từ lúc giải đến lúc dùng cookie. Sai một trong ba, CaptchaAI vẫn trả về "đã giải thành công" nhưng request tiếp theo của bạn lại bị chặn. Trước khi lần theo từng mã lỗi, hãy rà nhanh checklist bên dưới — phần lớn sự cố nằm ở một trong 8 điểm đó.
Checklist chẩn đoán 8 bước
- Trang này có thực sự đứng sau Cloudflare Challenge không, hay đang bị nhầm với Turnstile hoặc reCAPTCHA?
- Request đã gửi đủ 4 tham số bắt buộc chưa:
method,pageurl,proxy,proxytype? - Proxy có hoạt động không? Test độc lập bằng
curltrước khi nghi ngờ API. - Proxy đang dùng đã đa dạng nguồn yêu cầu chưa, hay vẫn nằm nguyên trong một dải IP trung tâm dữ liệu (loại này bị Cloudflare cấm rất nhanh)?
- Bước giải Challenge và bước gửi request tiếp theo có dùng chung một proxy không?
- User agent dùng để gửi request có khớp với user agent trả về từ bước giải không?
- Cookie có được set đúng domain không (nhớ dấu chấm ở đầu, ví dụ
.example.com)? - Cookie có còn nằm trong thời hạn (TTL), hay đã hết hạn từ lâu?
Nếu cả 8 điểm đều ổn mà vẫn lỗi, đọc tiếp phần tương ứng bên dưới.
Lỗi khi gửi request tới API
ERROR_BAD_PARAMETERS
Nguyên nhân: Thiếu tham số bắt buộc.
Cách sửa: Cloudflare Challenge yêu cầu đủ 4 tham số sau:
method=cloudflare_challenge
pageurl=https://example.com
proxy=user:pass@host:port
proxytype=HTTP
Cả 4 đều bắt buộc. Khác với Turnstile hay reCAPTCHA, proxy ở đây là bắt buộc, không phải tuỳ chọn.
ERROR_PROXY_CONNECTION_FAILED
Nguyên nhân: CaptchaAI không kết nối được qua proxy bạn cung cấp.
Cách sửa:
- Test proxy độc lập trước:
curl -x http://user:pass@host:port https://httpbin.org/ip - Đảm bảo proxy hỗ trợ HTTPS
- Kiểm tra yêu cầu whitelist IP phía nhà cung cấp proxy
- Đổi thử một proxy khác cùng nhà cung cấp
ERROR_PROXY_BANNED
Nguyên nhân: IP của proxy đang bị Cloudflare chặn.
Cách sửa, theo thứ tự nên thử:
- Đa dạng nguồn yêu cầu — chuyển sang proxy ISP thay vì trung tâm dữ liệu
- IP trung tâm dữ liệu bị Cloudflare gắn cờ rất nhanh và rất nhiều, nên đây thường là nguyên nhân gốc
- Đổi sang IP mới rồi thử lại
Tình huống thường gặp: một team theo dõi giá trên các sàn thương mại điện tử thuê một dải proxy trung tâm dữ liệu giá rẻ để chạy quanh năm. Sau vài nghìn request, cả dải IP bị Cloudflare gắn cờ cùng lúc và mọi request bắt đầu trả ERROR_PROXY_BANNED đồng loạt — đây là vấn đề chất lượng proxy, không phải lỗi ở phía tích hợp API.
Mẹo: nếu bạn đổi proxy liên tục mà vẫn dính
ERROR_PROXY_BANNED, nghi ngờ trước tiên vào loại proxy (trung tâm dữ liệu) thay vì nghi ngờ code tích hợp.
ERROR_CAPTCHA_UNSOLVABLE
Nguyên nhân: Không giải được thử thách dù đã thử lại nhiều lần. Nguyên nhân có thể đến từ ba hướng: trang web vừa đổi cấu hình bảo mật Cloudflare, bản thân IP proxy đang bị chặn, hoặc Cloudflare đang bật chế độ bảo mật nâng cao (Under Attack Mode) và cần chờ khoảng 5 phút rồi thử lại. Trước khi kết luận là bug, hãy xác nhận lại URL vẫn thực sự hiển thị Cloudflare Challenge chứ không phải một lớp bảo vệ khác.
Những lỗi tích hợp gặp nhiều nhất, gộp theo nguyên nhân
- Thiếu tham số proxy → trả về
ERROR_BAD_PARAMETERS→ luôn gửi kèm proxy khi gọicloudflare_challenge - Dùng proxy trung tâm dữ liệu → trả về
ERROR_PROXY_BANNED→ đa dạng nguồn yêu cầu hoặc chuyển sang ISP - User agent khác nhau giữa các request → cookie bị từ chối → tái sử dụng user agent từ kết quả giải
- IP khác nhau giữa các request → cookie bị từ chối → dùng chung một proxy cho toàn bộ request
- Không set đúng domain cho cookie → cookie không được gửi đi → set domain dạng
.example.com(có dấu chấm ở đầu) - Dùng HTTP thay vì HTTPS → kết nối thất bại → Cloudflare yêu cầu HTTPS
Cookie bị từ chối dù đã giải xong Challenge
Trong các ví dụ code bên dưới, cookie phiên sau khi giải được gọi là qa_session_cookie.
Cookie bị từ chối — IP không khớp
Nguyên nhân: IP lúc giải và IP lúc dùng cookie khác nhau.
Cách sửa: Dùng đúng một proxy cho cả bước giải lẫn các request sau đó:
# WRONG — different proxy for solving and requests
solve_proxy = "proxy1.example.com:8080"
request_proxy = "proxy2.example.com:8080"
# CORRECT — same proxy for both
proxy = "user:[email protected]:8080"
# Submit solve with this proxy
response = requests.get("https://ocr.captchaai.com/in.php", params={
"key": API_KEY,
"method": "cloudflare_challenge",
"pageurl": "https://example.com",
"proxy": proxy,
"proxytype": "HTTP",
"json": 1
})
# Use the SAME proxy for page requests
session = requests.Session()
session.cookies.set("qa_session_cookie", solved_cookie)
session.proxies = {"https": f"http://{proxy}"}
Cookie bị từ chối — user agent không khớp
Nguyên nhân: User agent lúc giải khác với user agent lúc gửi request.
Cách sửa: Lấy đúng user agent được trả về trong phản hồi giải và tái sử dụng:
solution = result["request"]
# Extract and reuse the exact user agent
user_agent = solution.get("user_agent")
session = requests.Session()
session.headers["User-Agent"] = user_agent # Must match exactly
session.cookies.set("qa_session_cookie", solution["qa_session_cookie"])
Cookie hết hạn
Nguyên nhân: Cookie phiên có TTL giới hạn (thường 15 phút – 24 giờ). Cách xử lý bền vững nhất là đừng chờ cookie hết hạn rồi mới xử lý: ghi lại thời điểm bạn nhận được cookie, chủ động giải lại trước khi TTL hết hạn, và tự động kích hoạt giải lại ngay khi nhận diện response trả về là trang thử thách thay vì nội dung thật.
def make_request(url, session):
response = session.get(url)
if "challenge" in response.text.lower() or response.status_code == 403:
# Cookie expired — re-solve
new_cookie = solve_cloudflare_challenge(url, proxy)
session.cookies.set("qa_session_cookie", new_cookie)
response = session.get(url)
return response
Lỗi timeout
Giải mất quá lâu (>5 phút)
Nguyên nhân: Cloudflare Challenge có thể chậm khi proxy chậm hoặc thử thách phức tạp hơn bình thường.
Cách sửa, theo mức ưu tiên:
- Đổi sang proxy có độ trễ thấp hơn — đây là nguyên nhân phổ biến nhất
- Tăng timeout polling lên 60 lần thử (tương đương 5 phút)
- Kiểm tra lại xem trang có thực sự dùng Cloudflare Challenge hay một lớp bảo vệ khác
CAPCHA_NOT_READY kéo dài
Nguyên nhân: Quá trình giải vẫn đang chạy, chưa xong — bản thân đây không phải lỗi. Cloudflare Challenge thường mất 20–60 giây để giải xong, lâu hơn hẳn các loại CAPTCHA khác, nên hãy polling endpoint res.php mỗi 5 giây, tối đa 60 lần thử. Nếu sau 5 phút vẫn CAPCHA_NOT_READY, hãy hủy và thử lại với một proxy khác thay vì tiếp tục polling vô thời hạn.
Câu hỏi thường gặp
- Vì sao Cloudflare Challenge luôn cần proxy, còn reCAPTCHA thì không? Cloudflare gắn cookie phiên với địa chỉ IP cụ thể, nên bước giải phải diễn ra từ đúng IP dùng cho request tiếp theo. Token reCAPTCHA không bị ràng buộc theo IP.
- Giải một Cloudflare Challenge thường mất bao lâu? Thường 20–60 giây, lâu hơn reCAPTCHA hay Turnstile. Đặt timeout polling ở mức 5 phút trước khi coi là thất bại.
- Proxy trung tâm dữ liệu có dùng được không? Gửi được về mặt kỹ thuật, nhưng tỷ lệ
ERROR_PROXY_BANNEDrất cao vì Cloudflare gắn cờ dải IP này rất nhanh; đa dạng nguồn yêu cầu hoặc dùng ISP sẽ ổn định hơn nhiều. - SOCKS5 có dùng được không? Có — đặt
proxytype=SOCKS5, giữ nguyên định dạnguser:pass@host:port. - Cookie giải trên một trang có dùng lại cho domain khác được không? Không. Cookie chỉ hợp lệ cho đúng domain và IP đã giải; domain khác phải giải lại riêng.