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ệ:
hcaptchavàrecaptchacũ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ủ.
cloudflarexuấ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:
- Đ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.
- User-Agent khác nhau. Các response của Browser trả về
userAgentmà chúng đã sử dụng. Hãy gửi nó trở lại cùng với cookie. - 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
- Xử lý bảo vệ Anti-Bot: Chọn engine nào cho từng cấp độ bảo vệ
- API Endpoints: Tài liệu tham khảo về request và response cho cả bốn endpoints
- Tái sử dụng Proxy cho nhiều requests: Cố định exit mà một clearance được liên kết vào
- Smart Fetch (Auto): Cách
meta.solvedhoạt động trong ladder - Response Headers: Nơi hiển thị chi phí credit của một lệnh gọi