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:
hcaptchairecaptchato 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ą.
cloudflarepojawia 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:
- Inne wyjście. Przypnij identyfikator proxy zwrócony w odpowiedzi z ominięciem zabezpieczeń. Zobacz Ponowne użycie proxy w wielu żądaniach.
- Inny User-Agent. Odpowiedzi przeglądarki zwracają
userAgent, z którego korzystały. Odeślij go z powrotem z cookie. - 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
- Obsługa ochrony antybotowej: Którego silnika użyć przy każdym poziomie ochrony
- Endpointy API: Dokumentacja request i response dla wszystkich czterech endpointów
- Ponowne użycie proxy w wielu requestach: Przypinanie węzła wyjściowego, z którym powiązane jest zatwierdzenie
- Smart Fetch (Auto): Jak
meta.solvedwpisuje się w drabinkę - Nagłówki response: Gdzie pojawia się koszt kredytowy wywołania