Kiểm tra trang web

Khi một target chạy kiểm tra bot trên đường đến trang bạn yêu cầu, FourA sẽ thông báo cho bạn. Mọi request gặp phải bot check đều trả về một trường nêu tên hệ thống, liệu bước kiểm tra đã được vượt qua hay chưa, và (khi đã vượt qua) dữ liệu clearance để bạn có thể phát lại giúp lệnh gọi tiếp theo bỏ qua nó.

Trang này là tài liệu tham khảo cho các trường đó. Về chiến lược, hãy xem Protected sites.

Vị trí của trường

Endpoint Field Present when
POST /api/single/ defense (object) Nhận diện được bot check trên response
POST /api/proxy/ defense (object) Tương tự, được báo cáo bởi lượt thử đã phản hồi
POST /api/browser/ defenseSolved (boolean) và defenses (object) Luôn xuất hiện, trên trang đã tải xong. defenseSolved là false và defenses trống khi không nhận diện được gì.
POST /api/auto/ meta.solved (boolean) Trên mọi phản hồi khi ladder đã bắt đầu. true khi một kiểm tra được vượt qua ở đâu đó trên ladder. Body không vượt qua validation hoặc host không phân giải được sẽ được phản hồi trước ladder, không có meta.

Sự vắng mặt nghĩa là không nhận diện được gì. Đừng hiểu việc thiếu defense là một lỗi.

Trên Single và Proxy, việc báo cáo cần có unblocker, tính năng này được bật theo mặc định. Với unblocker: false, bạn đã yêu cầu trang chính xác như khi nó trả về, vì vậy Single sẽ trả lại challenge nguyên vẹn và Browser sẽ render nó mà không giải.

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 mà bản ghi này đề cập đến: hệ thống đã được vượt qua, hoặc hệ thống chính gặp phải. Xem danh sách nhà cung cấp bên dưới.
solved boolean true nghĩa là kiểm tra đã được vượt qua và data là trang thật. false nghĩa là data có thể là trang thử thách.
present string[] Mọi hệ thống được nhận diện trên 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 xử lý vượt qua được.
ms number Số mili giây dùng để vượt qua kiểm tra. Chỉ xuất hiện khi vượt qua thành công.
hashes number Khối lượng tính toán mà thử thách yêu cầu. Chỉ xuất hiện khi vượt qua thành công.
complexity number Độ khó do thử thách khai báo. Chỉ xuất hiện khi vượt qua thành công, và chỉ ở nơi 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ỉ xuất hiện khi vượt qua thành công.
retry string Xuất hiện khi body được trả về từ một lần thử lại thay vì từ việc vượt qua thử thách. Hiện tại giá trị duy nhất là refusal-cookies. Xem bên dưới.
cookie string Jar cần phát lại: quyền truy cập nhận được khi vượt qua thử thách, hoặc phiên do phản hồi từ chối cung cấp.

solved: false là trường hợp đáng để phân nhánh xử lý. FourA không bao giờ trả về trang thử thách dưới dạng nội dung, vì vậy cờ này là tín hiệu cho thấy body cần chuyển cấp xử lý thay vì phân tích cú pháp.

retry: "refusal-cookies"

Một số trang web không chạy câu đố. Chúng từ chối request đầu tiên, đặt cookie trên phản hồi từ chối đó, và cung cấp trang thật cho bất kỳ ai gửi lại các cookie này. Các trang sản phẩm của eBay là trường hợp điển hình.

Khi điều đó xảy ra, FourA sẽ gửi lại chúng cho bạn và trả về trang hoàn chỉnh. Response sau đó sẽ mang retry: "refusal-cookies":

{
  "status": 200,
  "data": "<!doctype html>...",
  "defense": {
    "vendor": "akamai",
    "solved": false,
    "present": ["akamai"],
    "retry": "refusal-cookies",
    "cookie": "bm_sv=...; dp1=..."
  }
}

Hiểu như sau:

  • solved giữ nguyên false. Việc phản hồi một handshake không phải là vượt qua challenge, và không bao giờ làm thay đổi chi phí của lệnh gọi. Bạn được tính phí cho request bạn đã tạo.
  • data là nội dung thực, không phải trang challenge. Đây là trường hợp duy nhất mà solved: false không có nghĩa là body cần escalation, đó là lý do trường này tồn tại.
  • cookie là session mà trang web đã cấp. Phát lại session này theo cùng cách bạn phát lại clearance và các trang tiếp theo sẽ bỏ qua việc từ chối.
  • Việc retry và clear đều có thể diễn ra trên cùng một request. Nếu phản hồi của lượt retry lại là một challenge mà FourA có thể xử lý, bạn sẽ nhận được solved: true cùng các trường riêng của vendor và retry: "refusal-cookies" bên cạnh.

vendor trả về unknown khi một lượt retry tạo ra nội dung và không có hệ thống nào được nhận diện trên đường truyền. Khi đó present là một mảng rỗng.

defenses trên Browser

{
  "status": 200,
  "body": "<!doctype html>...",
  "userAgent": "Mozilla/5.0...",
  "defenseSolved": true,
  "defenses": {
    "present": ["cloudflare"],
    "cleared": ["cloudflare"]
  }
}
Truong Kieu Mo ta
defenseSolved boolean true khi gap mot he thong trong qua trinh tai va trang cuoi cung giu duoc clearance cua he thong do. Day la co quyet dinh luot goi ton 5 hay 10 credit.
defenses.present string[] Moi he thong duoc nhan dien tai bat ky thoi diem nao trong qua trinh tai trang, khong chi tren response cuoi cung. Mot kiem tra la thu da xay ra, va toi khi trang thuc su duoc tra ve thi challenge response da ket thuc tu lau.
defenses.cleared string[] Cac he thong ma trang cuoi cung nam giu clearance.

Mot ten trong present ma khong bao gio xuat hien trong cleared la he thong ma FourA co the nhan dien nhung chua the vuot qua. Nhung he thong do khong bao gio lam tang gia cua luot goi.

Nha cung cap

Gia tri vendor He thong
cloudflare Cac challenge va bot management cua Cloudflare
sgcaptcha He thong kiem tra trang cua SiteGround
datadome DataDome
perimeterx PerimeterX
akamai Akamai Bot Manager
incapsula Imperva Incapsula
awswaf AWS WAF challenge
ebay-splashui Challenge rieng cua eBay
reddit Cac trang kiem tra va tu choi rieng cua Reddit
amazon Kiem tra robot cua Amazon
google Kiem tra JavaScript cua Google Search
hcaptcha hCaptcha
recaptcha reCAPTCHA
unknown Khong nhan dien duoc he thong nao. Chi xuat hien cung retry, noi ban ghi ton tai de bao cao viec retry thay vi mot nha cung cap.

Nhung gi duoc xu ly clearance hien tai

Endpoint Xu ly clearance
Single, Proxy sgcaptcha, ebay-splashui. Ca hai deu su dung tinh toan thay vi hinh anh, vi vay khong can den trinh duyet.
Browser cloudflare, sgcaptcha

Moi thu khac trong danh sach chi duoc nhan dien va bao cao, khong co gi hon. Su phan chia do se thay doi khi FourA ho tro clearance cho nhieu he thong hon, vi vay hay doc solved thay vi tu suy doan tu bang nay.

Hai luu y ve cac truong hop ngoai le:

  • hcaptcha va recaptcha cung la cac widget form thong thuong. Chung chi duoc bao cao khi response thuc su chan ban (403, 429, hoac 503), vi vay mot trang thanh toan co widget xac minh trong form se khong tinh la gap he thong phong thu.
  • Viec nam sau Cloudflare khong phai la mot he thong phong thu. cloudflare xuat hien khi co mot challenge hoac thanh phan bot-management thuc su tren response, khong phai chi vi mot trang web su dung Cloudflare.

Phat lai Clearance

defense.cookie la toan bo muc dich cua truong nay. Mot clearance duoc gan lien voi exit node va User-Agent da tao ra no, vi vay hay phat lai thong qua cung cap doi do va qua trinh kiem tra se khong chay lai.

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 chịu chi phí giải quyết xác thực. Mọi replay sau đó là một request thông thường với mức giá thông thường.

Ba yếu tố làm hỏng một replay:

  1. Exit IP khác. Ghim proxy ID mà response giải quyết trả về. Xem Tái sử dụng Proxy qua các Request.
  2. User-Agent khác. Các response Browser trả về userAgent mà chúng đã sử dụng. Gửi lại giá trị đó cùng với cookie.
  3. Hết hạn. Các phiên xác thực có thời hạn riêng, do mục tiêu thiết lập. SiteGround duy trì khoảng 30 ngày cho toàn bộ trang web; phiên xác thực Cloudflare thường ngắn hơn nhiều. Hãy coi phiên xác thực như một bộ nhớ cache: khi các replay bắt đầu gặp lại thử thách xác thực, hãy thực hiện một lệnh gọi mới để lấy phiên mới.

Chi phí

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

Engine Cơ bản Đã giải quyết phòng thủ
Single 1 (2 với unblocker) Không đổi
Proxy 2 (4 với unblocker) Không đổi
Browser 5 10

Browser chỉ tính phí 10 khi trình giải được bật và hệ thống phòng thủ thực sự được giải quyết. Một hệ thống được nhận diện nhưng không được giải quyết có giá là 5, tương đương với một trang hoàn toàn không có kiểm tra.

Một trang kiểm tra mà FourA nhận diện được trả về với HTTP 200 (ví dụ kiểm tra robot của Amazon, trang xác minh của Reddit hoặc kiểm tra JavaScript của Google Search) sẽ không bị tính phí trên bất kỳ endpoint nào; response sẽ nêu tên trang đó trong X-FourA-Check-Page.

Kết hợp với validate

defense cho bạn biết đã gặp phải một kiểm tra. validate cho FourA biết trang thực sự trông như thế nào, giúp một request báo lỗi thay vì trả về một trang trung gian ngẫu nhiên 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à yếu tố ngăn chặn ladder chấp nhận trang challenge và coi như hoàn tất.

Liên quan

Cập nhật: 30 tháng 9, 2026