Smart Fetch (Auto)
Przekazujesz FourA adres URL i regułę validate określającą, co powinna zawierać właściwa strona. FourA robi resztę: przechodzi przez świadomą kosztów drabinę, zatrzymuje się na pierwszym szczeblu, który zwraca odpowiedź akceptowaną przez Twoje reguły, i zapamiętuje, co zadziałało dla danego hosta, aby kolejne wywołanie w tej samej witrynie było tanie.
Ten przewodnik wyjaśnia, co mechanizm auto robi pod maską, kiedy go używać i jak czytać jego odpowiedź. Dokumentacja parametrów znajduje się w API Endpoints.
Koncepcja
Większość konfiguracji do scrapowania zmusza do wybrania silnika z góry. Single jest najszybszy, Proxy dodaje rotację, Browser obsługuje JavaScript. Zły wybór oznacza stratę kredytów lub zablokowanie.
Mechanizm auto to odwraca. Deklarujesz sukces (validate), a nie metodę. FourA wspina się po drabinie, dopóki jeden ze szczebli nie odniesie sukcesu:
- Tania próba (single, prosto z własnej sieci FourA)
- Rotowane proxy single
- Browser, z obsługą JavaScript i mechanizmem rozwiązującym zabezpieczenia, jeśli strona ich używa
- Browser przez proxy dla najtrudniejszych celów
Mechanizm auto zatrzymuje się, gdy tylko szczebel zwróci odpowiedź akceptowaną przez Twoją regułę validate.
Wartość domyślna forceProxy to true, więc szczebel 1 jest pomijany, a cel nigdy nie widzi własnego adresu FourA. Większość wywołań kończy się wtedy na szczeblu 2 lub na odtworzonej ciepłej sesji. Ustaw forceProxy: false, gdy wiesz, że cel traktuje czysty adres lepiej niż rotujący, wtedy szczebel 1 powraca.
Co wysyłasz
Minimum to adres URL oraz podciąg znaków validate. Bez validate.data.accept mechanizm auto nie odróżni prawdziwej strony od strony z wyzwaniem zabezpieczającym zwróconej z kodem HTTP 200, przez co może zwrócić wyzwanie jako sukces.
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"]}}
}'
Opcjonalne ustawienia (zobacz dokumentację endpointu dla pełnych szczegółów):
returnSession(domyślnietrue): zwraca zwycięski{ proxy, cookies, userAgent }, aby umożliwić jego ponowne użycie.forceProxy(domyślnietrue): pomija szczeble direct-egress. Ustawfalsetylko wtedy, gdy wiesz, że strona lepiej reaguje na czyste IP niż na darmowe rotacyjne proxy.timeout_ms(domyślnie120000): całkowity budżet dla całego wywołania. Drabinka dzieli go między szczeble.ignoreProxies: identyfikatory proxy do uniknięcia przy każdej próbie częściowej.followRedirects(domyślnie5): maksymalna liczba przekierowań na tańszych szczeblach.
Co otrzymujesz w odpowiedzi
{
"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..."
}
}
Trzy rzeczy do przeczytania:
statusorazdata: taka sama struktura, jaką zwrócił silnik pod spodem.statusto status HTTP celu, a nie status transportu Twojego wywołania do FourA. Dla szczebli single oraz proxy,headersto tablica per-hop. Dla szczebli browser,headersto płaski obiekt.meta: ślad tego, co zrobiła drabina (ladder), obecny w każdej odpowiedzi.meta.rungokreśla krok, który dostarczył odpowiedź,meta.attemptszlicza próby podrzędnych wywołań,meta.solvedinformuje, czy wyzwanie dla bota zostało pokonane, ameta.creditsto całkowity koszt wywołania (taka sama wartość jak w nagłówkuX-FourA-Credits).session: trójka{ proxy, cookies, userAgent }, która przełamała cel. Użyj jej, aby ponowić żądanie do tego samego hosta przez/api/single/lub/api/browser/.
Auto odpowiada statusem HTTP 200 zawsze, gdy drabina zadziałała, nawet jeśli każdy jej szczebel zawiódł. Sprawdź status oraz error w ciele odpowiedzi, aby dowiedzieć się co się stało, zamiast polegać na kodzie statusu transportu. Status inny niż 200 z /api/auto/ oznacza, że FourA odrzuciło wywołanie przed startem drabiny: 401 dla nieprawidłowego klucza, 400 dla złego ciała lub prywatnego celu, 429 lub 503 dla rate limit.
Ponawianie żądań z użyciem sesji
Kiedy auto zwróci sesję, możesz od razu przejść do Single lub Browser, aby przetwarzać kolejne strony na tym samym hoście. Bez nowego przechodzenia przez drabinę i bez nowego sondowania.
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"])
Sesja jest na tyle trwała, na ile pozwala cel. Niektóre witryny wiążą autoryzację z plikami cookie na wiele godzin, inne rotują co kilka minut. Jeśli ponowne odtworzenie znów zacznie zwracać wyzwania, wywołaj /api/auto/ jeszcze raz, aby odświeżyć.
Kiedy używać Auto
| Użyj auto | Użyj single, proxy lub browser ręcznie |
|---|---|
| Celujesz w nową stronę i nie wiesz, czego wymaga | Znasz już silnik, który działa |
| Chcesz jednego wywołania obsługującego fallback direct, proxy i browser | Chcesz pełnej kontroli nad ponowieniami i limitami czasu dla każdego wywołania |
| Akceptujesz kilka sekund opóźnienia na badanie przy pierwszym wywołaniu | Opóźnienie pierwszego wywołania jest ważniejsze niż odkrywanie |
| Chcesz nauczonej sesji, którą można tanio odtwarzać | Optymalizujesz ciasną pętlę na znanym i dobrym celu |
Auto nie zawsze jest najtańszym wyborem. Jeśli wiesz, że cel działa z single + unblocker, bezpośrednie wywołanie Single kosztuje 2 kredyty z przewidywalnym opóźnieniem. Auto na tym samym celu kosztuje tyle, ile zużyje jego drabina, co może być wyższe, jeśli strona wymaga eskalacji.
Validate mówi Auto, co oznacza "sukces"
Najważniejszym parametrem jest validate. Bez niego auto nie potrafi odróżnić prawdziwej strony z kodem 200 od strony przejściowej z wyzwaniem 200 udającej treść.
Użyj validate.data.accept z podciągiem znaków, który zawiera tylko prawdziwa strona:
{
"validate": {
"data": {
"accept": ["sku-42-add-to-cart", "Customer reviews"]
}
}
}
W przypadku API JSON zaakceptuj oczekiwaną nazwę pola:
{
"validate": {
"data": { "accept": ["\"products\":["] },
"status": { "accept": [200] }
}
}
W przypadku witryn, które zasadnie zwracają kody inne niż 200 (blokady geograficzne do zignorowania, celowe błędy 403 na endpointach dla wylogowanych użytkowników), zezwól na nie poprzez validate.status.accept:
{
"validate": {
"status": { "accept": [200, 451] }
}
}
Bez validate, tryb auto opiera się na zasadzie "HTTP 200 = sukces" i nie wyłapie strony z wyzwaniem Cloudflare, którą WAF zwraca z kodem 200.
Odczyt meta.rung, aby zrozumieć co się wydarzyło
meta.rung to najbardziej przydatny sygnał debugowania. Wartości:
probe- rozwiązano za pomocą taniego żądania bezpośredniego. Najtańsza ścieżka.proxy- wymagało rotacji proxy, aby przejść.browser- wymagało pełnego wyrenderowania w przeglądarce, prawdopodobnie z rozwiązaniem wyzwania.cache- odtworzono ciepłą sesję z poprzedniego wywołania auto. Najtańsza ścieżka przy powtórnych wywołaniach.fail- żaden szczebel nie wygenerował odpowiedzi zaakceptowanej przez twoje reguły.
meta.solved: true oznacza, że wyzwanie dla botów zostało wykryte i rozwiązane podczas wywołania. meta.attempts to liczba prób podwywołań przed sukcesem. Aby uzyskać szczegółowe informacje o dostawcy odpowiadającym za rozwiązanie, odczytaj pole defense, które zwracają szczeble single i proxy: zobacz Zabezpieczenia Anti-Bot.
Jeśli strona ciągle kończy na browser, gdy oczekiwano probe, rozważ, czy bardziej restrykcyjna reguła validate (lub mniej restrykcyjna) pozwoliłaby na przejście tańszego szczebla. Pamiętaj, że forceProxy domyślnie przyjmuje wartość true, więc bezpośrednia próba wyjścia jest pomijana, chyba że ją wyłączysz.
Błędy i przypadki brzegowe
Gdy tryb auto zawiedzie, odpowiedź zawiera status (zazwyczaj status ostatniego nieudanego szczebla) oraz ciąg znaków error:
{
"status": 0,
"error": "all attempts failed",
"attempts": 7,
"meta": {
"rung": "fail",
"solved": false,
"attempts": 7,
"credits": 47
}
}
status: 0 oznacza, że żaden szczebel nie wygenerował żadnej odpowiedzi (każda próba zakończyła się przekroczeniem czasu oczekiwania lub została odrzucona). Niezerowe status plus error oznacza, że ostatnia próba uzyskała odpowiedź, ale auto ją odrzuciło (walidacja lub z innego powodu).
Sprawdź meta.attempts oraz meta.credits, aby zobaczyć, na co zużyto budżet. Jeśli meta.attempts jest wysokie, a meta.rung wynosi fail po szczeblu przeglądarki, cel może potrzebować dłuższego timeout_ms, bardziej rygorystycznej reguły validate lub po prostu nie jest w tej chwili osiągalny przez rotacyjne proxy.
Czego auto nie robi
- Nie omija ograniczeń prawnych. Jeśli strona jest zablokowana geograficznie i odrzuca każdy węzeł wyjściowy, do którego FourA może dotrzeć, auto zwraca blokadę.
- Nie buforuje treści. Każde wywołanie nadal trafia do celu. "Ciepła sesja" to proxy i ciasteczka, a nie odpowiedź.
- Nie zapisuje do Activity Log jako osobny wiersz obok podwywołań. Podwywołania Single / Proxy / Browser, które auto wykonuje w Twoim imieniu, pojawiają się w Activity; zewnętrzne wywołanie
/api/auto/pełni rolę koordynatora.
Powiązane
- API Endpoints: Pełna dokumentacja parametrów
- Choosing the Right Endpoint: Kiedy wybrać auto w przeciwieństwie do single, proxy lub browser
- Request Outcomes: Które wyniki są płatne
- Anti-Bot Protection: Co FourA robi z Cloudflare, DataDome i podobnymi rozwiązaniami
- Anti-Bot Defenses: Pole
defenseukryte zameta.solved - MCP Recipes: Te same wzorce, co wywołania narzędzi MCP