← Tất cả bài viết

Giới thiệu Auto: Một endpoint cho mọi mục tiêu

Endpoint Auto tự động chọn Single, Proxy Finder hoặc Browser cho từng request, xử lý các trang kiểm tra danh tính người gửi và trả về session để lượt gọi tiếp theo có thể tái sử dụng.

Có gì mới

Endpoint /api/auto hiện là con đường ngắn nhất để nhận response hoạt động cho mọi URL. Chỉ cần trỏ endpoint đến mục tiêu. Auto sẽ tự chọn chạy request qua Single, Proxy Finder, hoặc Browser, xử lý các bước kiểm tra của trang 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 là vậy. Phần còn lại của bài viết này giải thích cách thức 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 giải pháp (rẻ nhất trước, tốn kém nhất sau). Với mỗi request, Auto sẽ đi dần lên các bậc thang cho đến khi có một bậc mang lại response mà các quy tắc validate của bạn chấp nhận.

Thứ tự các bậc thang:

  1. Cached session. Nếu Auto có sẵn session hoạt động 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.
  2. Proxy Finder. Một request qua proxy xoay vòng. Phù hợp cho các trang web được bảo vệ chủ yếu bằng danh tiếng IP.
  3. Browser. Render đầy đủ, thực thi JavaScript, hoàn thành các bước kiểm tra mà trang yêu cầu, và thu thập cookie do trang web cấp.

Khi một bậc thành công, Auto sẽ lưu session tìm được: proxy id đã dùng, cookie do trang web cấp, và User-Agent. Ở lệnh gọi tiếp theo đến cùng host, Auto sẽ thử session đó trước. Nếu session vẫn hoạt động, bạn chỉ trả phí theo bậc rẻ, không phải bậc tốn kém.

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 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. Chi phí 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 từ bất kỳ địa chỉ nào. Vì vậy, 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ẻ chừng nào phiên còn duy trì. 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 dùng cookie (khi đã tìm thấy) phát lại với chính xác 2 credit mỗi lệnh gọi so với mức 10 credit trước đây khi mọi request đều đ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ỉ credit của proxy thứ tư được tính. Bạn trả tiền cho nội dung được phân phối, 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 rẻ tiền chạy liên tục sau đó, và bạn không cần phải tự viết logic caching.

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ế trong production:

Các mục tiêu bị chặn theo vị trí địa lý không còn làm lãng phí exit. Khi một trang web trả về lỗi 451 (hoặc trang thông báo chặn pháp lý) cho hầu hết các exit, Auto sẽ ghi nhận các quốc gia thực sự đã phân phối nội dung thành công. Ở lệnh gọi tiếp theo, hệ thống sẽ ưu tiên lấy các exit mới từ các quốc gia đó 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 quá nhiều tải dẫn đến việc bị rate limit.

Validate chạy trên mọi tầng. Một trang có nội dung không chính xác (chẳng hạn như giới hạn quốc gia trả về 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 thử cho đến khi có một tầng vượt qua được điều kiện kiểm tra. Không phải tầng được lưu cache. Không phải bất kỳ 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 lỗi chính xác kèm theo lý do thực sự.

Dành cho người dùng nâng cao

Một vài tùy chỉnh quan trọng khi bạn xử lý lưu lượng 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 chia thời gian này: mỗi lệnh gọi con nhận giá trị min(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 giá trị 20.000 đối với các tác vụ tương tác yêu cầu độ trễ thấp. Giữ nguyên mặc định đối với các tác vụ thu thập dữ liệu hàng loạt có thể chấp nhận độ trễ 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 ý nhỏ: một số trang web (Cloudflare tương tác có cổng kiểm soát độ tin cậy của IP) thực sự hoạt động tốt hơn từ một IP data-center sạch so với một residential exit có độ tin cậy thấp. Do đó, forceProxy: false có thể giúp xử lý một số mục tiêu dễ dàng hơn, chứ không khó hơn. Nếu bạn liên tục gặp phải các thử thách trên một host cụ thể, việc tắt tùy chọn này là một giải pháp rất đáng để thử.

ignoreProxies là danh sách tránh (avoid-list) phía client. Truyền các proxy id mà bạn biết là đã bị chặn (từ một session.proxy trước đó bị rate limit phía bạn), và Auto sẽ bỏ qua chúng ở mọi nơi: tái sử dụng warm session, tìm kiếm exit, và lệnh gọi phụ đến Proxy Finder. Nhờ đó Auto sẽ không chọn lại exit mà bạn vừa yêu cầu bỏ qua.

meta cũng cho phép bạn tự xây dựng dashboard: host nào đã chạm đến tầng browser hôm nay, số lần thử trung bình cho mỗi lần phân phối, tỷ lệ giữa các lượt fetch phải giải challenge và 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, đó là tín hiệu suy giảm session mà bạn có thể xử lý trước khi hóa đơ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"])

Về chính 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 phát triển của Auto.

Tính năng kiểm tra session sẽ sớm xuất hiện trên Dashboard. Hiện tại, các session mà Auto duy trì cho mỗi host nằm bên trong dịch vụ, và bạn không có gì để xem khi cần debug mức tiêu hao 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 thọ của chúng, thời gian tồn tại còn lại, và lịch sử bậc rung tương ứng của từng session. Cùng với đó là nút xóa session thủ công khi mục tiêu của bạn thay đổi và bạn biết cache đã không còn đúng.

Tiếp theo là khả năng 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ế độ "single-only" dành cho các nhóm có mục tiêu không bao giờ cần đến bậc browser. Cả hai tính năng hiện đang nằm sau feature flag.

Mục tiêu của Auto là giúp bạn không phải bận tâm về việc 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 trả về bậc rung đã sử dụng và session đã tạo. Đọc hai trường này và bạn sẽ biết chính xác lý do tại sao các lệnh gọi có mức chi phí như vậy.