Khắc Phục Sự Cố

Mã thông báo quay vòng không hợp lệ sau khi giải quyết: Chẩn đoán và khắc phục

Bạn đã gửi CAPTCHA quay vòng tới CaptchaAI, nhận lại mã thông báo nhưng trang đích từ chối. Mã thông báo đã được giải quyết về mặt kỹ thuật - vấn đề là cách thức hoặc thời điểm bạn sử dụng nó. Hướng dẫn này đề cập đến mọi lý do khiến mã thông báo Turnstile không thành công sau khi giải quyết.


Triệu chứng

Những gì bạn nhìn thấy Có khả năng gây ra
Trang web trả về 403 sau khi gửi mã thông báo Mã thông báo đã hết hạn trước khi gửi
Gửi biểu mẫu không thành công trong âm thầm Tên trường sai để tiêm mã thông báo
Mã thông báo được chấp nhận nhưng hành động bị chặn Khóa trang web không khớp - đã giải quyết sai tiện ích
Làm được một lần rồi thất bại Mã thông báo đã được sử dụng (dùng một lần)
Hoạt động trong trình duyệt, không thành công trong tập lệnh Thiếu cookie hoặc tiêu đề

Nguyên nhân 1: Token hết hạn

Mã thông báo quay vòng hết hạn nhanh chóng — thường trong vòng 300 giây (5 phút). Nếu mã của bạn mất quá nhiều thời gian từ khi nhận được mã thông báo đến khi gửi mã thì mã thông báo đã chết.

Khắc phục: Gửi mã thông báo ngay sau khi nhận được.

import requests
import time

API_KEY = "YOUR_API_KEY"

# Submit Turnstile task
submit = requests.post("https://ocr.captchaai.com/in.php", data={
    "key": API_KEY,
    "method": "turnstile",
    "sitekey": "0x4AAAAAAADnPIDROz1234",
    "pageurl": "https://staging.example.com/qa-login",
    "json": 1
}).json()

task_id = submit["request"]
time.sleep(10)

# Poll for result
for _ in range(24):
    result = requests.get("https://ocr.captchaai.com/res.php", params={
        "key": API_KEY, "action": "get", "id": task_id, "json": 1
    }).json()
    if result.get("status") == 1:
        token = result["request"]
        # USE TOKEN IMMEDIATELY — do not delay
        response = requests.post("https://staging.example.com/qa-login", data={
            "username": "user",
            "password": "pass",
            "cf-turnstile-response": token
        })
        break
    time.sleep(5)

Nguyên nhân 2: Sitekey sai

Mỗi tiện ích Turnstile có một khóa trang web duy nhất. Nếu trang có nhiều tiện ích hoặc bạn sao chép sai khóa, mã thông báo sẽ hợp lệ nhưng bị từ chối.

Cách tìm khóa trang web chính xác:

// In browser console on the target page
document.querySelectorAll('[data-sitekey]').forEach(el => {
    console.log('Sitekey:', el.getAttribute('data-sitekey'));
    console.log('Element:', el);
});

Nếu có nhiều khóa trang web, hãy sử dụng khóa được đính kèm với biểu mẫu bạn đang gửi.


Nguyên nhân 3: Tên trường sai

Turnstile mong đợi mã thông báo ở cf-turnstile-response chứ không phải g-recaptcha-response.

# WRONG — this is for reCAPTCHA
data = {"g-recaptcha-response": token}

# CORRECT — this is for Turnstile
data = {"cf-turnstile-response": token}

Một số trang web sử dụng tên trường tùy chỉnh. Kiểm tra biểu mẫu để tìm trường thực tế:

// Check what field the Turnstile widget populates
document.querySelector('[name*="turnstile"], [name*="cf-"]')

Nguyên nhân 4: Token đã được sử dụng

Mã thông báo quay vòng là loại sử dụng một lần. Nếu mã của bạn thử lại một yêu cầu có cùng mã thông báo thì lần thử thứ hai sẽ không thành công.

Khắc phục: Giải CAPTCHA mới cho mỗi lần gửi.


Cloudflare có thể xác thực mã thông báo dựa trên cookie phiên. Nếu bạn giải CAPTCHA trong một phiên và gửi trong phiên khác thì có khả năng bị từ chối.

# Use the SAME session for page load and token submission
session = requests.Session()

# Load the page first to establish cookies
session.get("https://staging.example.com/qa-login")

# Then solve and submit using the same session
token = solve_turnstile(sitekey, pageurl)
session.post("https://staging.example.com/qa-login", data={
    "cf-turnstile-response": token
})

Nguyên nhân 6: Hành động hoặc cData không khớp

Một số triển khai Turnstile bao gồm các tham số action hoặc cData được liên kết với mã thông báo. Nếu trang web mong đợi những điều này, bạn phải vượt qua chúng khi giải quyết.

submit = requests.post("https://ocr.captchaai.com/in.php", data={
    "key": API_KEY,
    "method": "turnstile",
    "sitekey": "0x4AAAAAAADnPIDROz1234",
    "pageurl": "https://staging.example.com/qa-login",
    "action": "login",           # If required by the site
    "data": "custom_cdata_value", # If required by the site
    "json": 1
}).json()

Cây quyết định

Token solved but rejected
    ↓
Used within 5 minutes? → No → Solve again, submit immediately
    ↓ Yes
Correct sitekey? → No → Find the correct sitekey from the page
    ↓ Yes
Using cf-turnstile-response field? → No → Change field name
    ↓ Yes  
Same session for page load + submit? → No → Use session persistence
    ↓ Yes
Token used only once? → No → Solve a new token per submission
    ↓ Yes
Site requires action/cData? → Check page source, add to API call

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

Mã thông báo Turnstile tồn tại trong bao lâu?

Thông thường là 300 giây (5 phút). Một số triển khai đặt thời hạn ngắn hơn. Gửi mã thông báo trong vòng vài giây sau khi nhận được nó.

Cloudflare Turnstile có giống với Cloudflare Challenge không?

Không. Turnstile là một tiện ích được nhúng (như reCAPTCHA). Cloudflare Challenge là quảng cáo chuyển tiếp toàn trang. Họ sử dụng các phương pháp CaptchaAI khác nhau: turnstilecloudflare_challenge.

Tại sao mã thông báo của tôi hoạt động trong Postman nhưng không hoạt động trong tập lệnh của tôi?

Người đưa thư có thể gửi các tiêu đề hoặc cookie khác nhau. Hãy khớp tiêu đề và trạng thái phiên của tập lệnh với nội dung trình duyệt gửi.


Giải quyết CAPTCHA quay vòng tại CaptchaAI

Nhận giải pháp Turnstile đáng tin cậy tạicaptchaai.com.


Hướng dẫn liên quan

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