Anti-Bot-Abwehrmaßnahmen
Wenn ein Ziel auf dem Weg zu der von dir angeforderten Seite eine Bot-Prüfung ausführt, teilt FourA dir das mit. Jede Request, die auf eine solche Prüfung trifft, gibt ein Feld zurück. Dieses Feld benennt das System, gibt an, ob die Prüfung bestanden wurde, und liefert (bei Bestehen) die Freigabe, die du wiederholen kannst, damit der nächste Aufruf sie überspringt.
Diese Seite ist die Referenz für diese Felder. Informationen zur Strategie findest du unter Umgang mit Anti-Bot-Schutz.
Wo das Feld zu finden ist
| Endpoint | Feld | Vorhanden wenn |
|---|---|---|
POST /api/single/ |
defense (object) |
Eine Bot-Prüfung in der Response erkannt wurde |
POST /api/proxy/ |
defense (object) |
Dasselbe, gemeldet vom Versuch, der geantwortet hat |
POST /api/browser/ |
defenseSolved (boolean) und defenses (object) |
Eine Bot-Prüfung während des Ladens der Seite erkannt wurde |
POST /api/auto/ |
meta.solved (boolean) |
Immer. true wenn eine Prüfung irgendwo in der Kette bestanden wurde. |
Das Fehlen bedeutet, dass nichts erkannt wurde. Interpretiere ein fehlendes defense nicht als Fehler.
Für das Reporting wird unblocker benötigt, was standardmäßig aktiviert ist. Mit unblocker: false hast du die Seite genau so angefordert, wie sie geliefert wurde. Daher gibt Single die Challenge unverändert zurück und Browser rendert sie, ohne sie zu lösen.
defense bei Single und 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>"
}
}
| Feld | Typ | Beschreibung |
|---|---|---|
vendor |
string | Das System, um das es in diesem Eintrag geht: das gelöste System oder das wichtigste angetroffene. Siehe die Anbieterliste unten. |
solved |
boolean | true bedeutet, dass die Prüfung gelöst wurde und data die echte Seite ist. false bedeutet, dass data die Challenge-Seite sein könnte. |
present |
string[] | Jedes in dieser Response erkannte System. Kann mehr Namen enthalten als vendor, und kann Namen enthalten, die noch niemand lösen kann. |
ms |
number | Benötigte Millisekunden, um die Prüfung zu lösen. Nur bei erfolgreichem Clear. |
hashes |
number | Die von der Challenge geforderte Rechenleistung. Nur bei erfolgreichem Clear. |
complexity |
number | Die von der Challenge deklarierte Schwierigkeit. Nur bei erfolgreichem Clear und nur, wenn die Challenge einen Wert meldet. |
answers |
number | Die Anzahl der gelieferten akzeptierten Antworten für Challenges, die mehrere anstelle von einer verlangen. Nur bei erfolgreichem Clear. |
cookie |
string | Die durch den Clear erhaltene Clearance, bereit für einen Replay. Nur bei erfolgreichem Clear. |
solved: false ist der Fall, für den sich ein Branching lohnt. FourA präsentiert ungelöste Challenges nie als Content. Das Flag ist dein Signal, dass der Body eskaliert und nicht geparst werden muss.
defenses im Browser
{
"status": 200,
"body": "<!doctype html>...",
"userAgent": "Mozilla/5.0...",
"defenseSolved": true,
"defenses": {
"present": ["cloudflare"],
"cleared": ["cloudflare"]
}
}
| Feld | Typ | Beschreibung |
|---|---|---|
defenseSolved |
boolean | true wenn beim Laden ein System gefunden wurde und die endgültige Seite dessen Freigabe (Clearance) enthält. Dieses Flag entscheidet, ob der Aufruf 15 oder 30 Credits kostet. |
defenses.present |
string[] | Jedes System, das zu einem beliebigen Zeitpunkt während des Ladevorgangs der Seite erkannt wurde, nicht nur in der finalen Response. Eine Prüfung ist ein Ereignis, das bereits stattgefunden hat; wenn die eigentliche Seite eintrifft, ist die Challenge-Response längst verschwunden. |
defenses.cleared |
string[] | Die Systeme, deren Freigabe die finale Seite enthält. |
Ein Name in present, der cleared nie erreicht, ist ein System, das FourA erkennen, aber noch nicht überwinden kann. Diese erhöhen den Preis eines Aufrufs nie.
Anbieter
vendor Wert |
Das System |
|---|---|
cloudflare |
Cloudflare Challenges und Bot-Management |
sgcaptcha |
SiteGround Site-Check |
datadome |
DataDome |
perimeterx |
PerimeterX |
akamai |
Akamai Bot Manager |
incapsula |
Imperva Incapsula |
awswaf |
AWS WAF Challenge |
ebay-splashui |
Eigene Challenge von eBay |
hcaptcha |
hCaptcha |
recaptcha |
reCAPTCHA |
Was heute freigegeben wird
| Endpoint | Löst |
|---|---|
| Single, Proxy | sgcaptcha, ebay-splashui. Beide sind rechnerisch statt visuell, daher ist kein Browser beteiligt. |
| Browser | cloudflare, sgcaptcha |
Alles andere auf der Liste wird erkannt und gemeldet, mehr nicht. Diese Aufteilung verschiebt sich, wenn FourA lernt, weitere zu lösen. Lies daher solved, anstatt dich auf diese Tabelle zu verlassen.
Zwei Hinweise zu Grenzfällen:
hcaptchaundrecaptchasind auch gewöhnliche Formular-Widgets. Sie werden nur gemeldet, wenn die Response dich tatsächlich blockiert hat (403, 429 oder 503). Eine Checkout-Seite mit einem CAPTCHA-Feld in einem Formular meldet also keine Abwehr.- Hinter Cloudflare zu stehen, ist keine Abwehr.
cloudflareerscheint, wenn es eine echte Challenge oder ein Bot-Management-Artefakt in der Response gibt, nicht weil eine Seite Cloudflare nutzt.
Eine Clearance wiederverwenden
defense.cookie ist der eigentliche Sinn dieses Feldes. Eine Freigabe (Clearance) ist an den Exit und den User-Agent gebunden, die sie erhalten haben. Spiele sie durch dasselbe Paar wieder ab, und die Prüfung wird nicht erneut ausgeführt.
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"])
Der erste Aufruf trägt die Kosten für die Freigabe. Jede Wiederholung ist ein normaler Request zum normalen Preis.
Drei Dinge brechen eine Wiederholung ab:
- Ein anderer Exit. Fixiere die Proxy-ID, die die Freigabe-Response zurückgegeben hat. Siehe Einen Proxy über Requests hinweg wiederverwenden.
- Ein anderer User-Agent. Browser-Responses geben den verwendeten
userAgentzurück. Sende ihn mit dem Cookie zurück. - Ablauf. Freigaben haben ihre eigenen Lebensdauern, die vom Ziel festgelegt werden. Bei SiteGround sind es etwa 30 Tage für die gesamte Seite; eine Cloudflare-Freigabe ist in der Regel viel kürzer. Behandle eine Freigabe wie einen Cache: Wenn Wiederholungen wieder Challenges zurückgeben, führe einen frischen Aufruf aus und nimm die neue Freigabe.
Was es kostet
Ein freigegebener Check ändert den Preis nur bei Browser:
| Engine | Basis | Freigegebene Defense |
|---|---|---|
| Single | 1 (2 mit unblocker) |
Keine Änderung |
| Proxy | 5 (10 mit unblocker) |
Keine Änderung |
| Browser | 15 | 30 |
Browser berechnet 30 nur, wenn der Solver aktiviert war und ein System wirklich freigegeben wurde. Ein System, das erkannt und nicht freigegeben wurde, kostet 15, genau wie eine Seite ohne jeglichen Check.
Kombiniere es mit validate
defense teilt dir mit, dass ein Check angetroffen wurde. validate teilt FourA mit, wie die echte Seite aussieht. Dadurch kann ein Request fehlschlagen, anstatt dir ein Interstitial zu liefern, das zufällig HTTP 200 trägt.
{
"method": "GET",
"url": "https://example.com/product/42",
"validate": {
"data": {"accept": ["Add to cart"], "fail": ["Just a moment"]}
}
}
Bei POST /api/auto/ verhindert validate, dass die Ladder eine Challenge-Seite akzeptiert und als erledigt betrachtet.
Verwandte Themen
- Umgang mit Anti-Bot-Schutz: Welche Engine bei welchem Schutzlevel zu wählen ist
- API-Endpoints: Request- und Response-Referenz für alle vier Endpoints
- Proxy über Requests hinweg wiederverwenden: Pinne den Exit, an den eine Clearance gebunden ist
- Smart Fetch (Auto): Wie sich
meta.solvedin die Ladder einfügt - Response-Header: Wo die Credit-Kosten eines Calls angezeigt werden