Có gì mới
Endpoint /api/auto hiện là con đường ngắn nhất để nhận được response hoạt động cho bất kỳ URL nào. Chỉ cần trỏ endpoint tới mục tiêu. Auto sẽ tự chọn thực thi request qua Single, Proxy Finder, hoặc Browser, xử lý các challenge chống bot khi gặp phải, và trả về một session mà lệnh gọi tiếp theo của bạn có thể tái sử dụng.
Một endpoint duy nhất. Mọi mục tiêu. Không cần chuyển đổi chế độ từ phía bạn.
Ý tưởng cốt lõi chỉ có vậy. Phần còn lại của bài viết này giải thích cách hoạt động, chi phí, và các điểm cần lưu ý.
Cách thức hoạt động
Bên dưới Auto là một thang bậc gồm các nấc xử lý (rẻ nhất trước, đắt nhất sau). Với mỗi request, Auto sẽ duyệt từ dưới lên cho đến khi có một nấc mang lại response mà các quy tắc validate của bạn chấp nhận.
Thứ tự các nấc:
- Cached session. Nếu Auto đã có sẵn một warm session cho host này từ lệnh gọi trước, nó sẽ gửi lại qua session đó trước. Đây là đường dẫn rẻ nhất.
- Proxy Finder. Một proxy request được xoay vòng. Phù hợp cho các trang web chủ yếu được bảo vệ bằng độ uy tín IP.
- Browser. Một lượt render đầy đủ có thực thi JavaScript, giải quyết các challenge chống bot, và thu thập các cookie do trang web cấp.
Khi một nấc thành công, Auto sẽ lưu session tìm được: proxy id đã dùng, cookie được cấp, và User-Agent. Trong lệnh gọi tiếp theo tới cùng host đó, Auto sẽ thử session này trước. Nếu nó vẫn hoạt động, bạn chỉ trả phí cho nấc rẻ thay vì nấc đắt đỏ.
Một lệnh gọi tối giản:
curl -X POST "https://api.foura.ai/api/auto" \
-H "X-API-Key: pk_live_..." \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com/data",
"validate": { "status": { "accept": [200] } }
}'
Một response đã được rút gọn:
{
"status": 200,
"data": "...",
"headers": [...],
"meta": {
"rung": "cache",
"solved": false,
"attempts": 1,
"credits": 2
},
"session": {
"proxy": "CLN1B8",
"cookies": [{ "name": "cf_clearance", "value": "..." }],
"userAgent": "..."
}
}
Có hai trường quan trọng cho những gì bạn sẽ xây dựng tiếp theo. meta.rung cho bạn biết đường dẫn nào đã thành công. session là bộ ba giá trị bạn có thể đưa vào một lệnh gọi /api/single để tự phát lại cùng một exit đó. Trường proxy là một ID base36 ẩn danh (không chứa IP thô), an toàn để ghi log và an toàn để truyền giữa các hệ thống.
Tác động
Có hai con số đáng chú ý ở đây.
Lệnh gọi đầu tiên đến một trang web được bảo vệ sẽ chạy tầng Browser: render, giải quyết thử thách, thu thập cookie, trả về trang cho bạn. Quá trình đó tốn khoảng 10 credit. Khi Auto đã lưu cache một phiên hoạt động cho host đó, các lệnh gọi tiếp theo sẽ phát lại phiên này: qua Single với 2 credit, hoặc qua Proxy Finder với 4 credit khi cookie của phiên hoạt động được từ bất kỳ địa chỉ nào. Do đó, lệnh gọi thứ hai rẻ hơn tới 5 lần so với lệnh gọi đầu tiên, và mọi lệnh gọi sau đó tiếp tục trả mức phí rẻ này miễn là phiên còn hiệu lực. Chúng tôi đã đo lường điều này trên môi trường production trong quá trình triển khai: các exit không cần cookie (sau khi được tìm thấy) phát lại với chính xác 2 credit cho mỗi lệnh gọi, so với mức 10 credit trước đây khi mọi request đều phải qua Proxy Finder.
Con số thứ hai: các tầng thất bại không bị tính phí. Nếu Auto thử ba proxy và mỗi proxy đều trả về lỗi 403 trước khi proxy thứ tư phân phối nội dung thành công, thì chỉ có credit của proxy thứ tư được tính. Bạn trả tiền cho nội dung được phân phối thành công, không phải cho quá trình tìm kiếm.
Đó là giá trị cốt lõi. Tầng tốn kém chỉ chạy một lần, tầng tiết kiệm chạy mãi mãi về sau, và bạn không cần phải tự viết logic lưu cache.
Hai hành vi khác cũng rất đáng lưu ý vì chúng giải quyết các vấn đề đau đầu thực tế trên production:
Các mục tiêu bị giới hạn địa lý không còn làm lãng phí exit. Khi một trang web trả về mã 451 (hoặc trang trung gian chặn vì lý do pháp lý) cho hầu hết các exit, Auto sẽ ghi nhận những quốc gia nào thực sự phân phối được nội dung. Ở lệnh gọi tiếp theo, nó sẽ ưu tiên lấy các exit mới từ các quốc gia đó trước và phân bổ tải đồng thời giữa chúng. Nhờ vậy, một exit may mắn duy nhất sẽ không bị dồn tải và bị giới hạn rate limit.
Validate chạy trên mọi tầng. Một trang có nội dung sai (chẳng hạn như lỗi chặn địa lý nhưng trả về mã status 200 kèm thông báo pháp lý trong body) không bao giờ được tính là thành công. Nếu validate.data.fail của bạn chứa "legal reasons", Auto sẽ tiếp tục xử lý cho đến khi có một tầng vượt qua được điều kiện này. Không dùng tầng đã cache. Không bỏ qua tầng nào. Nếu không có tầng nào vượt qua, bạn sẽ nhận được một thông báo thất bại trung thực kèm lý do thực tế.
Dành cho người dùng nâng cao
Một vài thông số quan trọng khi bạn đẩy khối lượng tải lớn qua Auto.
timeout_ms là ngân sách thời gian cho toàn bộ hoạt động, không phải cho từng tầng riêng lẻ. Mặc định là 120 giây. Auto sẽ phân bổ thời gian này: mỗi lệnh gọi phụ nhận giá trị min(thời gian timeout tự nhiên của nó, ngân sách còn lại), và hệ thống sẽ ngừng khởi chạy các tầng mới khi thời gian còn lại quá ít. Hãy đặt 20.000 đối với các tác vụ yêu cầu độ trễ tương tác. Giữ nguyên mặc định đối với các đợt crawl dữ liệu hàng loạt có thể chấp nhận thời gian phản hồi dài hơn.
forceProxy được bật theo mặc định. Auto không bao giờ chạm vào mục tiêu từ IP gốc của FourA trừ khi bạn thiết lập forceProxy: false. Một lưu ý: một số trang web (Cloudflare tương tác có phân loại mức độ tin cậy của IP) thực tế hoạt động tốt hơn từ một IP data-center sạch so với một exit residential có độ tin cậy thấp. Vì vậy forceProxy: false có thể giúp xử lý một số mục tiêu dễ dàng hơn, chứ không hề khó hơn. Nếu bạn thấy các thử thách xuất hiện liên tục trên một host cụ thể, việc tắt tùy chọn này là điều rất đáng thử nghiệm.
ignoreProxies là một danh sách tránh (avoid-list) phía client. Hãy truyền vào các proxy id mà bạn biết là đã bị chặn (từ một session.proxy trước đó bị dính rate limit phía bạn), và Auto sẽ bỏ qua chúng trên mọi phương diện: tái sử dụng session ấm, tìm kiếm exit node, và lệnh gọi phụ tới Proxy Finder. Do đó Auto sẽ không chọn lại exit node mà bạn vừa yêu cầu tránh.
meta cũng cho phép bạn tự xây dựng dashboard riêng: những host nào đã kích hoạt tầng browser hôm nay, số lần thử trung bình cho mỗi lượt phân phối, tỷ lệ giữa các lượt fetch phải giải challenge so với các lượt fetch sạch. Nếu một host cụ thể đột ngột tăng từ 2 credit lên 10 credit, đó là tín hiệu suy giảm chất lượng session mà bạn có thể xử lý trước khi hóa đơn của bạn bị đội lên.
Một ví dụ kết hợp cả bốn thành phần:
import requests
r = requests.post(
"https://api.foura.ai/api/auto",
headers={"X-API-Key": "pk_live_..."},
json={
"url": "https://example.com/product/9876",
"timeout_ms": 30000,
"forceProxy": True,
"ignoreProxies": ["CLN1B8", "K7X9AB"],
"validate": {
"status": {"accept": [200]},
"data": {"accept": ['"price":'], "fail": ["captcha", "legal reasons"]}
}
}
).json()
# If Auto delivered, keep the session for the next call to this host
if r.get("status") == 200 and "session" in r:
session = r["session"] # {proxy, cookies, userAgent}
print(r["meta"]["rung"], r["meta"]["credits"], r["meta"]["attempts"])
Đối với schema validate, hãy xem bài hướng dẫn trước trong Validate Rules Now Decide What Counts as Success.
Kế hoạch tiếp theo
Hiện có hai tính năng nằm trong lộ trình của Auto.
Kiểm tra session sẽ sớm có mặt trên Dashboard. Hiện tại, các session mà Auto duy trì cho mỗi host đều nằm bên trong dịch vụ, và bạn không có công cụ nào để xem xét khi cần debug sự cố tiêu hao tài nguyên từ phía mình. Chúng tôi đang xây dựng giao diện xem session theo từng host để bạn có thể thấy các session được lưu trong cache, độ tuổi của chúng, thời gian tồn tại còn lại, và lịch sử bậc thực thi (rung history) đằng sau mỗi session. Ngoài ra còn có nút để xóa session thủ công khi mục tiêu thay đổi và bạn biết cache đã không còn chính xác.
Sau đó là các biện pháp kiểm soát chi phí chặt chẽ hơn. Giới hạn credit cứng cho mỗi request (không bao giờ chi tiêu quá X cho lệnh gọi này, báo lỗi rõ ràng nếu vượt mức) và chế độ "chỉ chạy single" dành cho các đội ngũ có mục tiêu không bao giờ cần đến bậc browser. Cả hai tính năng này hiện đều đang được ẩn sau feature flag.
Mục đích của Auto là giúp bạn không cần bận tâm nên gọi sản phẩm nào. Điều đó không có nghĩa là bạn không thể kiểm tra những gì đã diễn ra. Mọi response đều gửi kèm thông tin về bậc thực thi đã chọn và session đã tạo. Đọc hai trường đó, bạn sẽ biết chính xác lý do các lệnh gọi của mình phát sinh mức chi phí như vậy.