So Sánh

Giải CAPTCHA bằng token và bằng cookie: khác nhau thế nào

Bạn không chọn giữa token và cookie — trang đích chọn thay bạn. Thử thách nằm trong form (reCAPTCHA, Cloudflare Turnstile) trả về một chuỗi token dán vào request lúc submit; thử thách chặn ở cửa trước (Cloudflare Challenge, JS Challenge) trả về một cookie phiên, và mọi request sau đó đi thẳng vào nội dung.

Nhận diện đúng luồng quyết định bước giải nằm ở đâu trong pipeline, worker có cần trình duyệt hay không, và một lần giải phục vụ được bao nhiêu request.


Bảng tra nhanh: tình huống nào dùng luồng nào

Tình huống Nên dùng Lý do
Form đăng nhập có reCAPTCHA v2 Token Token đi cùng dữ liệu form trong một POST
Form có Cloudflare Turnstile Token Giá trị vào trường cf-turnstile-response
Phân trang sau Cloudflare Challenge Cookie Một lần giải cho cả vòng lặp
Vừa chặn cửa trước vừa có form Cả hai Cookie mở đường, token qua form

Ba khác biệt quyết định kiến trúc

Tiêu chí Luồng token Luồng cookie
Kết quả trả về Chuỗi token (hơn 500 ký tự) Cookie phiên (qa_session_cookie)
Vòng đời 60–120 giây 30 phút đến 24 giờ
Tái sử dụng Không, dùng một lần Có, suốt phiên
Ràng buộc IP Dùng được từ mọi IP Gắn với IP đã giải
Cần trình duyệt Chỉ khi lấy sitekey Cần trình duyệt đầy đủ để giải

Ba dòng cuối quyết định bước giải nằm sát lúc gửi form, hay nằm trong một job khởi tạo phiên chạy trước mọi worker khác.


Luồng token: giải sát ngay trước lúc gửi form

Toàn bộ luồng chạy bằng HTTP thuần:

  1. Lấy sitekey và URL trang từ HTML.
  2. Gửi hai giá trị đó tới endpoint in.php.
  3. Nhận ID task, rồi polling res.php tới khi có kết quả.
  4. Đặt token vào trường ẩn của form rồi gửi form trong cùng một request.

Bước 1 hay sai nhất khi sitekey sinh bằng JavaScript — cách lấy tham số reCAPTCHA từ HTML trang liệt kê các biến thể.

Trường nhận token tùy loại: reCAPTCHA v2/v3 dùng g-recaptcha-response (v3 thêm action, enterprise=1 với sitekey Enterprise), Cloudflare Turnstile dùng cf-turnstile-response — CaptchaAI trả kết quả trong dưới 10 giây. hCaptcha dùng h-captcha-response, nhưng CaptchaAI không hỗ trợ hCaptcha.

Ví dụ Python: giải reCAPTCHA v2 rồi POST form

Đoạn code gửi task tới in.php, polling res.php tối đa hai phút, rồi POST form kèm token.

import requests
import time

API_KEY = "YOUR_API_KEY"

# 1. Solve
resp = requests.post("https://ocr.captchaai.com/in.php", data={
    "key": API_KEY,
    "method": "userrecaptcha",
    "googlekey": "6Le-wvkSAAAAAPBMR...",
    "pageurl": "https://staging.example.com/qa-login",
    "json": "1",
}).json()
task_id = resp["request"]

# 2. Poll
token = None
for _ in range(24):
    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"]
        break

# 3. Submit form with token (no browser needed)
form_response = requests.post("https://staging.example.com/qa-login", data={
    "email": "[email protected]",
    "password": "password",
    "g-recaptcha-response": token,
})

Nếu status vẫn bằng 0 khi vòng lặp kết thúc thì tăng số vòng lặp chứ đừng rút ngắn khoảng chờ 5 giây. Token chỉ sống 60–120 giây và dùng một lần, đừng xếp nó vào hàng đợi.


Chi phí nằm ở bước khởi tạo phiên, không ở từng request, nên ba bước dưới đây thường tách thành một job riêng:

  1. Trang đích trả về trang thử thách (Cloudflare Challenge hoặc JS Challenge).
  2. Một trình duyệt thật vượt qua thử thách — bên trong có thể là Turnstile.
  3. Máy chủ đặt cookie phiên (qa_session_cookie); mọi request mang cookie này đi thẳng vào nội dung.

CaptchaAI xử lý trang Cloudflare Challenge trong dưới 15 giây; chi tiết vòng đời cookie nằm trong hướng dẫn về cookie phiên của Cloudflare Challenge.

Selenium chỉ làm một việc là vượt thử thách và giữ cookie; phần đọc dữ liệu do requests.Session gánh.

from selenium import webdriver
import requests
import time

# 1. Solve the challenge in a browser
driver = webdriver.Chrome()
driver.get("https://example.com/protected")

# Wait for challenge to complete (manually or with CaptchaAI)
time.sleep(10)  # Or use CaptchaAI token injection

# 2. Extract cookies from browser
cookies = driver.get_cookies()
qa_session_cookie = next(
    (c for c in cookies if c["name"] == "qa_session_cookie"), None
)
user_agent = driver.execute_script("return navigator.userAgent")
driver.quit()

# 3. Use cookies for subsequent requests (no browser needed)
session = requests.Session()
session.headers.update({"User-Agent": user_agent})

for cookie in cookies:
    session.cookies.set(cookie["name"], cookie["value"])

# All requests now pass the challenge
for page in range(1, 50):
    resp = session.get(f"https://example.com/api/data?page={page}")
    print(f"Page {page}: {resp.status_code}")

Session phải khai đúng UA của trình duyệt đã giải, nếu không cookie bị từ chối ngay ở request đầu tiên.

Thay đổi Hậu quả Cách xử lý
Worker đổi IP ra Internet Cookie bị từ chối Cho worker giải và worker dùng chung đường ra
Đổi User-Agent, kể cả số phiên bản Cookie bị từ chối Lưu UA cùng cookie, đọc lại cả cặp
Quá hạn 30 phút đến 24 giờ Thử thách quay lại Đặt TTL Redis ngắn hơn hạn thật
Giải không có trình duyệt Không có cookie Chỉ bước dùng lại chạy bằng HTTP thuần

Khi một trang bắt bạn dùng cả hai

Thứ tự bắt buộc là cookie trước, token sau — phải tải được HTML thì mới đọc ra sitekey.

# Step 1: Get past Cloudflare (cookie)
session = get_cf_clearance_session("https://example.com")

# Step 2: Load the form (using the cookie session)
html = session.get("https://example.com/submit").text
sitekey = extract_sitekey(html)

# Step 3: Solve reCAPTCHA (token)
token = solve_recaptcha(sitekey, "https://example.com/submit")

# Step 4: Submit form (cookie + token)
resp = session.post("https://example.com/submit", data={
    "data": "value",
    "g-recaptcha-response": token,
})

Đảo thứ tự là hỏng: token giải trước thường đã quá 120 giây khi bạn vượt xong thử thách.


Hóa đơn tính theo thread, không theo số lần giải

Giải 5.000 hay 50.000 CAPTCHA trong tháng không làm đổi giá gói; thứ làm đổi giá là số CAPTCHA chạy đồng thời ở đỉnh tải. CaptchaAI tính tiền theo thread (luồng giải đồng thời) với số lần giải không giới hạn, nên câu hỏi ngân sách là "bao nhiêu job chạy song song". Luồng cookie giảm số lần giải chứ không giảm số thread bạn cần.


Tình huống thực tế: pipeline theo dõi giá ở TP.HCM

Giả sử bạn chạy pipeline theo dõi giá cho chính catalog của công ty trên Shopee, Lazada và Tiki. Job hằng đêm rơi vào hai luồng khác nhau:

  • Đọc dữ liệu công khai thuộc luồng cookie: một worker có trình duyệt vượt thử thách lúc 1 giờ sáng, ghi cookie và UA vào Redis cho 20 worker requests dùng lại.
  • Gửi form trên portal nhà bán hàng của chính bạn thuộc luồng token: mỗi lần submit là một lần giải mới.

Pipeline thiên về cookie thường chỉ cần vài thread, nên BASIC ($15/tháng, 5 thread) là điểm bắt đầu hợp lý; hàng chục job form chạy song song cùng khung giờ thì ADVANCE ($90/tháng, 50 thread) sát hơn. Nếu dữ liệu có thông tin cá nhân, hãy ghi log thời điểm giải và mục đích từng job cho phần tuân thủ Nghị định 13/2023/NĐ-CP.


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

Mở DevTools và xem trang chặn bạn ở đâu. Ô thử thách nằm trong form kèm trường ẩn g-recaptcha-response hoặc cf-turnstile-response là luồng token; trang trung gian chặn rồi mới chuyển tiếp kèm cookie mới là luồng cookie.

Token hết hạn giữa chừng thì xử lý thế nào?

Giải lại, đừng thử lại request cũ. Cho hàm gửi form tự gọi lại bước giải khi server báo lỗi xác thực CAPTCHA, và giữ khoảng cách nhận token đến lúc POST dưới 60 giây.

Được, nhưng chỉ khi mọi worker đi ra Internet bằng cùng một IP và khai cùng một User-Agent. Worker nằm trên nhiều máy chủ thì mỗi nhóm IP cần một cookie riêng.

CaptchaAI có trả h-captcha-response cho hCaptcha không?

Không — CaptchaAI không hỗ trợ hCaptcha và FunCaptcha (Arkose Labs), còn GeeTest v4 mới ở trạng thái sắp ra mắt. Dùng được ngay là reCAPTCHA v2/v3 (kể cả Enterprise), Cloudflare Turnstile, Cloudflare Challenge, GeeTest v3, CAPTCHA ảnh/OCR, grid image và BLS; CaptchaFox, Friendly Captcha, Lemin ở giai đoạn beta.


Giải CAPTCHA bằng CaptchaAI

Nhận API key tại captchaai.com, rồi chạy lại đoạn code reCAPTCHA v2 ở trên với sitekey trên môi trường staging của bạn.


Bài liên quan

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