Phòng thủ Anti-Bot

Khi một mục tiêu chạy kiểm tra bot trên đường dẫn đến trang bạn đã yêu cầu, FourA sẽ thông báo cho bạn. Mỗi request gặp phải kiểm tra này sẽ trả về một trường cho biết tên hệ thống, liệu kiểm tra đã được vượt qua hay chưa, và (nếu đã vượt qua) thông tin xác thực để bạn có thể replay nhằm bỏ qua kiểm tra đó ở lệnh gọi tiếp theo.

Trang này là tài liệu tham khảo cho các trường đó. Về mặt chiến lược, hãy xem phần Xử lý Anti-Bot Protection.

Vị trí của các trường

Endpoint Trường Xuất hiện khi
POST /api/single/ defense (object) Một kiểm tra bot được nhận diện trên response
POST /api/proxy/ defense (object) Tương tự, được báo cáo bởi attempt đã phản hồi
POST /api/browser/ defenseSolved (boolean) và defenses (object) Một kiểm tra bot được nhận diện trong quá trình tải trang (page load)
POST /api/auto/ meta.solved (boolean) Luôn luôn. true khi một kiểm tra đã được vượt qua ở một vị trí nào đó.

Việc không xuất hiện có nghĩa là không nhận diện được gì. Đừng hiểu việc thiếu defense là một thất bại.

Việc báo cáo cần có unblocker, được bật theo mặc định. Với unblocker: false, bạn đã yêu cầu trang nguyên bản, do đó Single sẽ trả lại thử thách (challenge) nguyên vẹn và Browser sẽ render mà không giải quyết.

defense trên Single và Proxy

{
  "status": 200,
  "data": "<!doctype html>...",
  "total_time": 3.61,
  "defense": {
    "vendor": "sgcaptcha",
    "solved": true,
    "present": ["sgcaptcha"],
    "ms": 3412,
    "hashes": 1048576,
    "complexity": 20,
    "cookie": "_I_=<clearance>"
  }
}
Trường Loại Mô tả
vendor string Hệ thống liên quan đến bản ghi này: hệ thống đã được vượt qua hoặc hệ thống chính đã gặp. Xem danh sách vendor bên dưới.
solved boolean true có nghĩa là bài kiểm tra đã được vượt qua và data là trang thực tế. false có nghĩa data có thể là trang thử thách.
present string[] Mọi hệ thống được nhận diện trong response này. Có thể chứa nhiều tên hơn vendor và có thể chứa các tên chưa ai vượt qua được.
ms number Số mili-giây đã tiêu tốn để vượt qua bài kiểm tra. Chỉ có khi đã vượt qua.
hashes number Khối lượng công việc tính toán mà thử thách yêu cầu. Chỉ có khi đã vượt qua.
complexity number Độ khó do thử thách khai báo. Chỉ có khi đã vượt qua và chỉ khi thử thách có báo cáo giá trị này.
answers number Số lượng câu trả lời được chấp nhận đã cung cấp, dành cho các thử thách yêu cầu nhiều câu trả lời thay vì một. Chỉ có khi đã vượt qua.
cookie string Thông tin xác thực (clearance) thu được khi vượt qua, sẵn sàng để replay. Chỉ có khi đã vượt qua.

solved: false là trường hợp đáng để rẽ nhánh. FourA không bao giờ trả về một thử thách chưa được giải quyết dưới dạng nội dung, vì vậy cờ (flag) này là tín hiệu cho bạn biết rằng phần body cần được báo cáo (escalation) thay vì parsing.

defenses trên Browser

{
  "status": 200,
  "body": "<!doctype html>...",
  "userAgent": "Mozilla/5.0...",
  "defenseSolved": true,
  "defenses": {
    "present": ["cloudflare"],
    "cleared": ["cloudflare"]
  }
}
Trường Loại Mô tả
defenseSolved boolean true khi một hệ thống xuất hiện trong quá trình tải và xác nhận vượt qua của nó được giữ lại trên trang cuối. Đây là cờ quyết định xem lệnh gọi tốn 15 hay 30 credit.
defenses.present string[] Mọi hệ thống được nhận diện tại bất kỳ thời điểm nào trong quá trình tải trang, không chỉ trên response cuối cùng. Việc kiểm tra là thứ đã xảy ra, và vào lúc trang thực sự được tải về thì response của challenge đã đi qua từ lâu.
defenses.cleared string[] Các hệ thống mà trang cuối giữ xác nhận vượt qua.

Một cái tên trong present không bao giờ đạt đến cleared là một hệ thống mà FourA có thể nhận diện nhưng chưa thể vượt qua. Những hệ thống đó không bao giờ làm tăng giá của một lệnh gọi.

Các nhà cung cấp

Giá trị vendor Hệ thống
cloudflare Challenge và quản lý bot của Cloudflare
sgcaptcha Kiểm tra trang web của SiteGround
datadome DataDome
perimeterx PerimeterX
akamai Akamai Bot Manager
incapsula Imperva Incapsula
awswaf Challenge của AWS WAF
ebay-splashui Challenge riêng của eBay
hcaptcha hCaptcha
recaptcha reCAPTCHA

Những gì được vượt qua hiện tại

Endpoint Vượt qua
Single, Proxy sgcaptcha, ebay-splashui. Cả hai đều mang tính tính toán thay vì hình ảnh, do đó không liên quan đến trình duyệt.
Browser cloudflare, sgcaptcha

Mọi thứ khác trong danh sách đều được nhận diện và báo cáo, và không có gì thêm. Sự phân chia đó sẽ thay đổi khi FourA học cách vượt qua nhiều hệ thống hơn, vì vậy hãy đọc solved thay vì giả định từ bảng này.

Hai lưu ý ở các trường hợp ngoại lệ:

  • hcaptcharecaptcha cũng là các widget biểu mẫu thông thường. Chúng chỉ được báo cáo khi response thực sự chặn bạn (403, 429, hoặc 503), do đó một trang thanh toán có trường CAPTCHA trong biểu mẫu không báo cáo đây là một lớp phòng thủ.
  • Nằm sau Cloudflare không phải là một lớp phòng thủ. cloudflare xuất hiện khi có một challenge thực sự hoặc một thành phần quản lý bot trên response, không phải vì một trang web sử dụng Cloudflare.

Phát lại một lần xác nhận vượt qua

defense.cookie là toàn bộ ý nghĩa của trường này. Một xác nhận vượt qua được gắn kết với exit đã giành được nó và User-Agent đã giành được nó, vì vậy hãy phát lại nó qua cùng một cặp và quá trình kiểm tra sẽ không chạy lại.

import requests

API = "https://eu.api.foura.ai"
H = {"X-API-Key": "YOUR_API_KEY", "Content-Type": "application/json"}

# 1) First call pays for the clear.
first = requests.post(f"{API}/api/proxy/", headers=H, json={
    "maxTries": 5,
    "request": {"method": "GET", "url": "https://example.com/catalog"},
}).json()

defense = first.get("defense", {})
if defense.get("solved"):
    clearance = defense["cookie"]
    exit_id = first["proxy"]

    # 2) Follow-up pages skip the check: same exit, same clearance.
    for page in range(2, 6):
        r = requests.post(f"{API}/api/single/", headers=H, json={
            "method": "GET",
            "url": f"https://example.com/catalog?page={page}",
            "proxy": exit_id,
            "headers": [["Cookie", clearance]],
        }).json()
        print(page, r["status"])

Lần gọi đầu tiên sẽ chịu chi phí cho việc vượt qua xác minh. Mỗi lần gọi lại là một request thông thường với mức giá thông thường.

Ba điều sau sẽ làm hỏng một lần gọi lại:

  1. Điểm thoát khác nhau. Hãy ghim ID proxy mà response vượt xác minh đã trả về. Xem Sử dụng lại Proxy qua nhiều Request.
  2. User-Agent khác nhau. Các response của Browser trả về userAgent mà chúng đã sử dụng. Hãy gửi nó trở lại cùng với cookie.
  3. Hết hạn. Các lần vượt xác minh có thời gian sống riêng, được thiết lập bởi mục tiêu. Thời gian của SiteGround là khoảng 30 ngày cho toàn bộ trang web, vượt xác minh Cloudflare thường ngắn hơn nhiều. Hãy coi một lần vượt xác minh giống như một cache: khi các lần gọi lại bắt đầu trả về challenge, hãy chạy một lần gọi mới và lấy kết quả mới.

Chi phí

Một kiểm tra được vượt qua chỉ làm thay đổi giá trên Browser:

Engine Cơ bản Vượt phòng thủ
Single 1 (2 với unblocker) Không đổi
Proxy 5 (10 với unblocker) Không đổi
Browser 15 30

Browser chỉ tính phí 30 khi solver được bật và hệ thống thực sự được vượt qua. Một hệ thống được nhận diện và không bị vượt qua sẽ có chi phí 15, tương đương với một trang không có kiểm tra nào.

Kết hợp với validate

defense cho bạn biết một kiểm tra đã được bắt gặp. validate cho FourA biết trang thực sự trông như thế nào, điều này cho phép một request bị lỗi thay vì đưa cho bạn một trang trung gian vô tình mang mã HTTP 200.

{
  "method": "GET",
  "url": "https://example.com/product/42",
  "validate": {
    "data": {"accept": ["Add to cart"], "fail": ["Just a moment"]}
  }
}

Trên POST /api/auto/, validate là thứ ngăn ladder chấp nhận một trang challenge và coi như đã hoàn tất.

Bài viết liên quan

Cập nhật: 12 tháng 8, 2026