Truy xuất thông minh (Tự động)

Bạn cung cấp cho FourA một URL và một quy tắc validate về những gì trang web thực cần phải chứa. FourA sẽ làm phần còn lại: nó đi theo một thang bậc tối ưu chi phí, dừng lại ở nấc đầu tiên trả về một response mà quy tắc của bạn chấp nhận và ghi nhớ những gì đã hoạt động cho từng host để lệnh gọi tiếp theo trên cùng một trang sẽ rẻ hơn.

Hướng dẫn này giải thích cơ chế hoạt động bên trong của auto, khi nào nên sử dụng nó và cách đọc response của nó. Để tham khảo các tham số, xem API Endpoints.

Ý tưởng

Hầu hết các thiết lập scraping buộc bạn phải chọn engine từ đầu. Single là nhanh nhất, Proxy thêm xoay vòng, Browser xử lý JavaScript. Nếu bạn đoán sai, bạn sẽ lãng phí credit hoặc bị block.

Auto đảo ngược điều đó. Bạn khai báo thành công (validate), không phải phương pháp. FourA leo lên một thang bậc cho đến khi một nấc thành công:

  1. Dò tìm giá rẻ (single, trực tiếp từ mạng riêng của FourA)
  2. Proxy single xoay vòng
  3. Browser, với JavaScript và một solver nếu trang web đưa ra challenge
  4. Browser qua proxy cho các mục tiêu khó nhất

Auto dừng lại ngay khi một nấc trả về một response mà quy tắc validate của bạn chấp nhận.

forceProxy mặc định là true, do đó nấc 1 bị bỏ qua và mục tiêu không bao giờ thấy địa chỉ riêng của FourA. Hầu hết các lệnh gọi sau đó hoàn thành ở nấc 2 hoặc trên một warm session được phát lại. Đặt forceProxy: false khi bạn biết một mục tiêu đối xử với một địa chỉ sạch tốt hơn một địa chỉ xoay vòng và nấc 1 sẽ hoạt động trở lại.

Những gì bạn gửi

Mức tối thiểu là một URL cộng với một chuỗi con validate. Nếu không có validate.data.accept, auto không thể phân biệt một trang web thực với một challenge interstitial được trả về cùng mã HTTP 200 và nó có thể trả về challenge đó như là thành công.

curl -X POST https://eu.api.foura.ai/api/auto/ \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://example.com/product/42",
    "validate": {"data": {"accept": ["Add to cart"]}}
  }'

Các tùy chọn (xem tài liệu tham khảo endpoint để biết chi tiết đầy đủ):

  • returnSession (mặc định true): trả về { proxy, cookies, userAgent } chiến thắng để bạn có thể chạy lại nó.
  • forceProxy (mặc định true): bỏ qua các bậc direct-egress. Chỉ đặt false nếu bạn biết trang web thân thiện với một IP sạch hơn là với các proxy xoay vòng miễn phí.
  • timeout_ms (mặc định 120000): tổng ngân sách cho toàn bộ request. Thang sẽ phân bổ nó qua các bậc.
  • ignoreProxies: các ID proxy cần tránh trên mỗi lần thử phụ.
  • followRedirects (mặc định 5): số lượt chuyển hướng tối đa trên các bậc giá rẻ.

Kết quả trả về

{
  "status": 200,
  "data": "<!doctype html>...",
  "headers": [{"content-type": "text/html"}],
  "meta": {
    "rung": "cache",
    "solved": false,
    "attempts": 1,
    "credits": 2
  },
  "session": {
    "proxy": "A1B2C3",
    "cookies": [{"name": "session", "value": "abc", "domain": "example.com"}],
    "userAgent": "Mozilla/5.0..."
  }
}

Ba điều cần đọc:

  • statusdata: có cùng cấu trúc mà engine bên dưới trả về. status là HTTP status của mục tiêu, không phải transport status của lệnh gọi đến FourA. Đối với các rung single và proxy, headers là một mảng per-hop. Đối với các rung browser, headers là một flat object.
  • meta: dấu vết về những gì ladder đã thực hiện, có mặt trên mọi response. meta.rung đặt tên cho bước đã phân phối response, meta.attempts đếm số lần thử sub-call, meta.solved gắn cờ liệu thử thách bot đã được vượt qua hay chưa, và meta.credits là tổng chi phí cho lệnh gọi (cùng số lượng với X-FourA-Credits header).
  • session: bộ ba { proxy, cookies, userAgent } đã bẻ khóa mục tiêu. Sử dụng nó để phát lại với cùng một máy chủ thông qua /api/single/ hoặc /api/browser/.

Auto phản hồi bằng HTTP 200 bất cứ khi nào ladder chạy, ngay cả khi mọi rung đều thất bại. Đọc statuserror trong body để tìm hiểu chuyện gì đã xảy ra, không đọc transport status code. Phản hồi không phải 200 từ /api/auto/ có nghĩa là FourA đã từ chối lệnh gọi trước khi ladder bắt đầu: 401 cho một khóa lỗi, 400 cho body lỗi hoặc mục tiêu private, 429 hoặc 503 cho rate limit.

Phát lại với Session

Sau khi auto trả về một session, bạn có thể chuyển thẳng vào Single hoặc Browser cho các trang tiếp theo trên cùng một máy chủ. Không có lần leo ladder mới, không có thăm dò mới.

import requests

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

# 1) First call: let auto figure it out.
r = requests.post(f"{API}/api/auto/", headers=H, json={
    "url": "https://example.com/product/42",
    "validate": {"data": {"accept": ["Add to cart"]}},
}).json()

session = r["session"]
proxy = session["proxy"]
user_agent = session["userAgent"]

# 2) Follow-up pages: replay through single with the same proxy + UA.
for sku in ("43", "44", "45"):
    r = requests.post(f"{API}/api/single/", headers=H, json={
        "method": "GET",
        "url": f"https://example.com/product/{sku}",
        "proxy": proxy,
        "headers": [["User-Agent", user_agent]],
    }).json()
    print(sku, r["status"])

Phiên chỉ tồn tại lâu tùy theo giới hạn của mục tiêu. Một số trang web gắn quyền truy cập vào cookie trong nhiều giờ, số khác thay đổi mỗi vài phút. Nếu việc phát lại bắt đầu trả về các thử thách (challenge), hãy gọi /api/auto/ một lần nữa để làm mới.

Khi nào nên sử dụng Auto

Sử dụng auto Sử dụng single, proxy hoặc browser thủ công
Bạn đang nhắm đến một trang web mới và không biết nó cần gì Bạn đã biết engine nào hoạt động hiệu quả
Bạn muốn một lệnh gọi tự động xử lý direct, proxy và browser fallback Bạn muốn kiểm soát hoàn toàn việc thử lại và timeout trên từng lệnh gọi
Bạn chấp nhận mất vài giây dò tìm ở lệnh gọi đầu tiên Độ trễ của lệnh gọi đầu tiên quan trọng hơn việc khám phá
Bạn muốn có một phiên đã học để phát lại với chi phí thấp Bạn đang tối ưu hóa một vòng lặp chặt chẽ trên một mục tiêu đã biết là hoạt động tốt

Auto không phải lúc nào cũng là lựa chọn rẻ nhất. Nếu bạn biết một mục tiêu hoạt động với single + unblocker, việc gọi trực tiếp Single sẽ tốn 2 credit với độ trễ dự đoán được. Auto trên cùng mục tiêu đó sẽ tiêu tốn chi phí tương đương các bước leo thang của nó, có thể cao hơn nếu trang web yêu cầu leo thang.

Validate cho Auto biết "Thành công" nghĩa là gì

Tham số quan trọng nhất là validate. Nếu không có nó, auto không thể phân biệt trang 200 thực sự với trang thử thách trung gian 200 được ngụy trang thành nội dung.

Sử dụng validate.data.accept với một chuỗi con mà chỉ trang thực mới chứa:

{
  "validate": {
    "data": {
      "accept": ["sku-42-add-to-cart", "Customer reviews"]
    }
  }
}

Đối với JSON API, hãy chấp nhận tên trường mà bạn mong đợi:

{
  "validate": {
    "data": { "accept": ["\"products\":["] },
    "status": { "accept": [200] }
  }
}

Đối với các trang web trả về mã không phải 200 một cách hợp lệ (chặn địa lý bạn muốn bỏ qua, lỗi 403 có chủ đích trên các endpoint đã đăng xuất), hãy cho phép chúng thông qua validate.status.accept:

{
  "validate": {
    "status": { "accept": [200, 451] }
  }
}

Nếu không có validate, auto sẽ lùi về "HTTP 200 = success" và sẽ không bắt được trang trung gian thử thách Cloudflare mà WAF trả về với mã 200.

Đọc meta.rung để hiểu điều gì đã xảy ra

meta.rung là tín hiệu gỡ lỗi hữu ích nhất. Các giá trị:

  • probe - đã giải quyết trên một request trực tiếp giá rẻ. Đường dẫn rẻ nhất.
  • proxy - cần xoay vòng proxy để vượt qua.
  • browser - cần render trình duyệt đầy đủ, có thể đi kèm việc giải quyết thử thách.
  • cache - phát lại một phiên ấm từ một lệnh gọi auto trước đó. Đường dẫn rẻ nhất cho các lệnh gọi lặp lại.
  • fail - không có nấc nào tạo ra response mà các quy tắc của bạn chấp nhận.

meta.solved: true có nghĩa là một thử thách bot đã được phát hiện và vượt qua trong cuộc gọi. meta.attempts là số lần thử lệnh gọi phụ trước khi thành công. Để biết thông tin chi tiết về nhà cung cấp đằng sau việc giải quyết, hãy đọc trường defense mà các nấc đơn và proxy trả về: xem Hệ thống phòng thủ Anti-Bot.

Nếu một trang web liên tục kết thúc ở browser khi bạn mong đợi probe, hãy xem xét liệu một quy tắc validate nghiêm ngặt hơn (hoặc ít nghiêm ngặt hơn) có cho phép một nấc rẻ hơn đi qua hay không. Hãy nhớ rằng forceProxy mặc định là true, do đó việc thăm dò thoát trực tiếp sẽ bị bỏ qua trừ khi bạn tắt nó.

Lỗi và các trường hợp ngoại lệ

Khi auto thất bại, response sẽ mang status (thường là trạng thái của nấc thất bại cuối cùng) và một chuỗi error:

{
  "status": 0,
  "error": "all attempts failed",
  "attempts": 7,
  "meta": {
    "rung": "fail",
    "solved": false,
    "attempts": 7,
    "credits": 47
  }
}

status: 0 có nghĩa là không có rung nào tạo ra response (mọi nỗ lực đều bị timeout hoặc bị từ chối). Một status khác không cộng với error có nghĩa là nỗ lực cuối cùng đã nhận được response, nhưng auto đã từ chối nó (validate hoặc cách khác).

Kiểm tra meta.attemptsmeta.credits để xem ngân sách đã được sử dụng ở đâu. Nếu meta.attempts cao và meta.rungfail sau browser rung, mục tiêu có thể cần timeout_ms dài hơn, quy tắc validate nghiêm ngặt hơn, hoặc đơn giản là hiện không thể truy cập qua các rotating proxy.

Những Gì Auto Không Làm

  • Nó không bỏ qua các hạn chế pháp lý. Nếu một trang web bị geo-block và từ chối mọi exit mà FourA có thể truy cập, auto sẽ trả về block đó.
  • Nó không cache nội dung. Mọi call vẫn đi đến mục tiêu. "warm session" là proxy và các cookie, không phải response.
  • Nó không ghi vào Activity Log dưới dạng một hàng riêng biệt khỏi các sub-call. Các sub-call Single / Proxy / Browser mà auto thực hiện thay mặt bạn sẽ xuất hiện trong Activity; /api/auto/ call bên ngoài là một bộ điều phối.

Liên Quan

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