Khắc Phục Sự Cố

Cloudflare Turnstile 403 sau khi gửi mã thông báo: Hướng dẫn khắc phục

Bạn đã giải được CAPTCHA của Turnstile và nhận được mã thông báo hợp lệ nhưng trang đích vẫn trả về 403 Bị cấm. Hướng dẫn này bao gồm mọi nguyên nhân.


Tại sao 403 sau mã thông báo hợp lệ

nguyên nhân Khả năng
Thiếu cookie Rất phổ biến
Mã thông báo đã hết hạn chung
Điểm cuối gửi sai chung
Thiếu tiêu đề yêu cầu Trung bình
IP không khớp giữa giải quyết và gửi Trung bình
Cloudflare Challenge (không phải cửa quay) Đôi khi bối rối

Turnstile đặt cookie trong quá trình xác thực. Nếu bạn không đưa những cookie này vào yêu cầu tiếp theo của mình, Cloudflare sẽ chặn bạn.

import requests

session = requests.Session()

# Step 1: Load the page to get initial cookies
session.get("https://example.com")

# Step 2: Solve Turnstile
token = solve_turnstile(
    api_key="YOUR_API_KEY",
    sitekey="TURNSTILE_SITEKEY",
    pageurl="https://example.com",
)

# Step 3: Submit token to the validation endpoint
# This sets <staging-session-cookie> cookie
resp = session.post("https://example.com/api/verify", data={
    "cf-turnstile-response": token,
}, headers={
    "Content-Type": "application/x-www-form-urlencoded",
    "Origin": "https://example.com",
    "Referer": "https://example.com/",
})

# Step 4: Now make your actual request WITH the session cookies
resp = session.get("https://example.com/protected-page")
print(resp.status_code)  # Should be 200 now

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

Mã thông báo quay vòng kéo dài ~300 giây nhưng hãy sử dụng chúng ngay lập tức để có kết quả tốt nhất.

import time

# Solve
start = time.time()
token = solve_turnstile(...)
solve_time = time.time() - start

# Check if token is still fresh
if solve_time > 240:  # > 4 minutes is risky
    print("Token may be too old, solving again...")
    token = solve_turnstile(...)

# Submit immediately
submit_token(token)

Nguyên nhân 3: Phương thức gửi sai

Tìm cách trang web gửi mã thông báo Turnstile:

# Some sites use a hidden form field
data = {
    "cf-turnstile-response": token,
    "username": "user",
    "password": "pass",
}

# Some sites use a custom header
headers = {
    "X-Turnstile-Token": token,
}

# Some sites use JSON body
json_data = {
    "turnstileToken": token,
    "email": "user@example.com",
}

Cách tìm đúng tên trường:

  1. Mở trình duyệt DevTools → tab Mạng
  2. Hoàn thành thử thách Turnstile theo cách thủ công
  3. Tìm yêu cầu gửi biểu mẫu
  4. Nhìn vào nội dung yêu cầu để biết tên trường mã thông báo

Nguyên nhân 4: Thiếu tiêu đề

Cloudflare kiểm tra tính nhất quán của các tiêu đề yêu cầu:

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
    "Accept-Language": "en-US,en;q=0.9",
    "Origin": "https://example.com",
    "Referer": "https://staging.example.com/qa-login",
    "Sec-Fetch-Dest": "document",
    "Sec-Fetch-Mode": "navigate",
    "Sec-Fetch-Site": "same-origin",
}

session.headers.update(headers)

Nguyên nhân 5: Cloudflare Challenge vs Turnstile

Cloudflare Turnstile và Cloudflare Challenge là các hệ thống khác nhau:

tính năng cửa quay Cloudflare Challenge
Tiện ích Hộp kiểm hiển thị trên trang Màn hình thử thách toàn trang
Phương pháp CaptchaAI turnstile cloudflare_challenge
Trường mã thông báo cf-turnstile-response N/A (dựa trên cookie)

Nếu bạn thấy thử thách toàn trang, hãy sử dụng method=cloudflare_challenge để thay thế.


Hoàn thành ví dụ làm việc

import requests
import time
import re

def solve_turnstile_and_access(target_url, api_key):
    """Complete flow: solve Turnstile and access protected page."""
    session = requests.Session()
    session.headers.update({
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36",
    })

    # Load page, get cookies and sitekey
    resp = session.get(target_url)
    match = re.search(r'data-sitekey="([^"]+)"', resp.text)
    if not match:
        raise RuntimeError("Turnstile sitekey not found")

    sitekey = match.group(1)

    # Solve via CaptchaAI
    submit_resp = requests.post("https://ocr.captchaai.com/in.php", data={
        "key": api_key,
        "method": "turnstile",
        "sitekey": sitekey,
        "pageurl": target_url,
        "json": 1,
    }, timeout=30)
    task_id = submit_resp.json()["request"]

    # Poll
    for _ in range(12):
        time.sleep(5)
        poll = requests.get("https://ocr.captchaai.com/res.php", params={
            "key": api_key, "action": "get",
            "id": task_id, "json": 1,
        }, timeout=15)
        data = poll.json()
        if data.get("status") == 1:
            token = data["request"]
            break
    else:
        raise TimeoutError("Solve timeout")

    # Submit token using the same session
    form_resp = session.post(target_url, data={
        "cf-turnstile-response": token,
    }, headers={
        "Origin": f"https://{requests.utils.urlparse(target_url).netloc}",
        "Referer": target_url,
    })

    return session, form_resp

# Usage
session, resp = solve_turnstile_and_access(
    "https://staging.example.com/qa-login",
    "YOUR_API_KEY",
)
# session now has valid cookies for subsequent requests

Khắc phục sự cố

Vấn đề Nguyên nhân Cách xử lý
403 mặc dù mã thông báo hợp lệ Thiếu cookie phiên Sử dụng cùng một phiên cho tất cả các yêu cầu
403 ở các trang tiếp theo chưa được đặt Xác thực mã thông báo phải trả lại cookie
Hoạt động một lần, sau đó 403 Cookie đã hết hạn Giải quyết lại cho cookie mới
Luôn luôn 403 Thử thách toàn trang, không phải Cloudflare Turnstile Sử dụng phương pháp cloudflare_challenge

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

kéo dài bao lâu?

Thông thường là 30 phút đến 24 giờ. Nếu các yêu cầu tiếp theo bắt đầu thất bại, hãy giải quyết lại Cloudflare Turnstile.

Tôi có cần proxy cho Turnstile không?

Thường là không - Tỷ lệ thành công 100% của CaptchaAI trên Turnstile thường hoạt động mà không cần proxy. Chỉ thêm proxy nếu trang web kiểm tra tính nhất quán của IP.

Tôi có thể chuyển sang phiên khác không?

Có, nhưng nó được liên kết với Tác nhân người dùng và có thể được liên kết với IP. Giữ cả hai nhất quán.


Hướng dẫn liên quan


Sửa lỗi 403 —giải quyết Turnstile với CaptchaAI.

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