Zabezpieczenia antybotowe

Gdy cel uruchamia test na obecność botów po drodze do żądanej strony, FourA Cię o tym informuje. Każdy request, który na niego natrafi, zwraca pole zawierające nazwę systemu, informację o tym, czy test został zaliczony, oraz (w przypadku sukcesu) poświadczenie, którego możesz użyć ponownie, aby następne wywołanie go pominęło.

Ta strona jest referencją dla tych pól. Informacje o strategii znajdziesz w Obsługa ochrony przed botami.

Gdzie znajduje się to pole

Endpoint Pole Obecne, gdy
POST /api/single/ defense (obiekt) Rozpoznano test na obecność botów w response
POST /api/proxy/ defense (obiekt) To samo, zgłoszone przez próbę, która odpowiedziała
POST /api/browser/ defenseSolved (wartość logiczna) oraz defenses (obiekt) Rozpoznano test na obecność botów podczas ładowania strony
POST /api/auto/ meta.solved (wartość logiczna) Zawsze. true, gdy test został zaliczony gdzieś na ścieżce.

Brak oznacza, że nic nie zostało rozpoznane. Nie interpretuj braku defense jako błędu.

Raportowanie wymaga unblocker, co jest domyślnie włączone. Przy unblocker: false żądasz strony dokładnie w takiej postaci, w jakiej przyszła, więc Single zwraca wyzwanie nietknięte, a Browser renderuje je bez rozwiązywania.

defense w Single i 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>"
  }
}
Pole Typ Opis
vendor string System, którego dotyczy ten rekord: ten, który został rozwiązany, lub główny napotkany. Zobacz listę dostawców poniżej.
solved boolean true oznacza, że test został rozwiązany, a data to rzeczywista strona. false oznacza, że data może być stroną z wyzwaniem (challenge).
present string[] Każdy system rozpoznany w tej odpowiedzi. Może zawierać więcej nazw niż vendor i może zawierać nazwy, których nikt jeszcze nie rozwiązuje.
ms number Czas w milisekundach spędzony na rozwiązywaniu testu. Tylko przy rozwiązaniu.
hashes number Ile pracy obliczeniowej wymagało wyzwanie. Tylko przy rozwiązaniu.
complexity number Zadeklarowany poziom trudności wyzwania. Tylko przy rozwiązaniu i tylko tam, gdzie wyzwanie go raportuje.
answers number Ile zaakceptowanych odpowiedzi dostarczono dla wyzwań, które wymagają kilku odpowiedzi zamiast jednej. Tylko przy rozwiązaniu.
cookie string Zezwolenie uzyskane po rozwiązaniu, gotowe do powtórnego użycia. Tylko przy rozwiązaniu.

solved: false to przypadek, dla którego warto stworzyć gałąź logiki. FourA nigdy nie prezentuje nierozwiązanego wyzwania jako treści, więc ta flaga to sygnał, że odpowiedź wymaga eskalacji, a nie parsowania.

defenses w Browser

{
  "status": 200,
  "body": "<!doctype html>...",
  "userAgent": "Mozilla/5.0...",
  "defenseSolved": true,
  "defenses": {
    "present": ["cloudflare"],
    "cleared": ["cloudflare"]
  }
}
Pole Typ Opis
defenseSolved boolean true gdy system został napotkany podczas ładowania, a jego autoryzacja znajduje się na docelowej stronie. To flaga decydująca, czy wywołanie kosztuje 15, czy 30 kredytów.
defenses.present string[] Każdy system rozpoznany w dowolnym momencie ładowania strony, nie tylko w odpowiedzi końcowej. Sprawdzenie to zdarzenie z przeszłości, a zanim nadejdzie właściwa strona, odpowiedź na wyzwanie już dawno znika.
defenses.cleared string[] Systemy, których autoryzację zawiera strona końcowa.

Nazwa w present, która nigdy nie trafia do cleared, to system, który FourA potrafi rozpoznać, ale którego jeszcze nie potrafi ominąć. Takie systemy nie podnoszą ceny wywołania.

Dostawcy

Wartość vendor System
cloudflare Wyzwania i zarządzanie botami Cloudflare
sgcaptcha Sprawdzanie witryny SiteGround
datadome DataDome
perimeterx PerimeterX
akamai Akamai Bot Manager
incapsula Imperva Incapsula
awswaf Wyzwanie AWS WAF
ebay-splashui Własne wyzwanie eBay
hcaptcha hCaptcha
recaptcha reCAPTCHA

Co jest obecnie omijane

Endpoint Omija
Single, Proxy sgcaptcha, ebay-splashui. Oba mają charakter obliczeniowy, a nie wizualny, więc przeglądarka nie jest zaangażowana.
Browser cloudflare, sgcaptcha

Wszystko inne na liście jest rozpoznawane i raportowane, i nic więcej. Ten podział zmienia się, w miarę jak FourA uczy się omijać kolejne, dlatego polegaj na solved zamiast zakładać coś na podstawie tej tabeli.

Dwie dodatkowe uwagi:

  • hcaptcha i recaptcha to również zwykłe widżety formularzy. Są zgłaszane tylko wtedy, gdy odpowiedź faktycznie zablokowała żądanie (403, 429 lub 503), więc strona kasy z polem CAPTCHA w formularzu nie zgłasza ochrony.
  • Bycie za Cloudflare nie jest ochroną. cloudflare pojawia się, gdy w odpowiedzi znajduje się rzeczywiste wyzwanie lub artefakt zarządzania botami, a nie tylko dlatego, że strona używa Cloudflare.

Odtwarzanie autoryzacji

defense.cookie to główny cel tego pola. Autoryzacja jest powiązana z wezłem wyjściowym, który ją uzyskał, oraz z User-Agentem, który ją uzyskał, dlatego odtwórz ją przez tę samą parę, a sprawdzenie nie zostanie uruchomione ponownie.

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"])

Pierwsze wywołanie ponosi koszt obejścia zabezpieczeń. Każde kolejne powtórzenie to zwykłe żądanie w standardowej cenie.

Trzy rzeczy uniemożliwiają powtórzenie:

  1. Inne wyjście. Przypnij identyfikator proxy zwrócony w odpowiedzi z ominięciem zabezpieczeń. Zobacz Ponowne użycie proxy w wielu żądaniach.
  2. Inny User-Agent. Odpowiedzi przeglądarki zwracają userAgent, z którego korzystały. Odeślij go z powrotem z cookie.
  3. Wygaśnięcie. Ominięcia zabezpieczeń mają własny czas życia, ustawiany przez cel. W przypadku SiteGround wynosi on około 30 dni dla całej witryny; ominięcie w Cloudflare jest zazwyczaj znacznie krótsze. Traktuj ominięcie jako cache: gdy powtórzenia znów zaczną zwracać weryfikacje (challenges), uruchom jedno nowe wywołanie i pobierz nowe ominięcie.

Koszty

Ominięcie weryfikacji zmienia cenę tylko dla Browser:

Silnik Podstawa Obejście zabezpieczeń
Single 1 (2 z unblocker) Bez zmian
Proxy 5 (10 z unblocker) Bez zmian
Browser 15 30

Browser pobiera opłatę 30 tylko wtedy, gdy solver był włączony, a zabezpieczenia systemu zostały rzeczywiście ominięte. System, który został rozpoznany, ale którego zabezpieczeń nie ominięto, kosztuje 15, tyle samo co strona bez żadnych weryfikacji.

Połącz z validate

defense informuje o napotkaniu weryfikacji. validate mówi systemowi FourA, jak wygląda rzeczywista strona, co pozwala na niepowodzenie żądania (request) zamiast zwracania strony przejściowej, która przypadkowo posiada status HTTP 200.

{
  "method": "GET",
  "url": "https://example.com/product/42",
  "validate": {
    "data": {"accept": ["Add to cart"], "fail": ["Just a moment"]}
  }
}

W POST /api/auto/, validate zapobiega zaakceptowaniu strony wyzwania przez drabinkę i uznaniu zadania za zakończone.

Powiązane

Aktualizacja: 12 sierpnia 2026