← Alle Artikel

Imperva Incapsula: Warum Dein Scraper 'Request Unsuccessful' Bekommt und Wie Du Es Behebst

Dein Skript ruft eine Produktseite ab und bekommt ein paar hundert Bytes HTML zurück. Kein Produkt, kein Preis. Nur eine Zeile: “Request unsuccessful. Incapsula incident ID: …” und dahinter eine lange Nummer. Manchmal kommt sie mit einem 403. Manchmal, noch schlimmer, mit einem 200. Du öffnest dieselbe URL im Browser, und sie lädt sofort.

Du hast Imperva getroffen. Es ist ein verbreitetes Bot-Schutzsystem auf Seiten aus Handel, Reisen, Immobilien, Finanzen und Verwaltung, und es verhält sich in einigen Punkten anders als Cloudflare oder DataDome. Genau diese Punkte zählen beim Scraping. Dieser Guide zeigt dir, wie du Imperva erkennst, wie es entscheidet, dass du ein Bot bist, und wie du mit Open-Source-Tools an die echte Seite kommst.

Was Imperva (Incapsula) Eigentlich Ist

Incapsula war der ursprüngliche Name von Impervas Cloud-Sicherheitsdienst: ein CDN und eine Web Application Firewall (WAF), die vor einer Website sitzen. Die Marke ist weitgehend verschwunden, aber der Name lebt in Cookie-Namen und Blockseiten weiter. Deshalb sprechen Entwickler bis heute von “Incapsula”. 2019 kaufte Imperva Distil Networks, eines der frühen Unternehmen für Bot-Abwehr, und daraus wurde Imperva Advanced Bot Protection. Imperva selbst gehört heute zu Thales.

Für dich zählt vor allem: Eine geschützte Seite kann zwei Ebenen haben.

  • Die Edge-Ebene (WAF und CDN). Jede Anfrage läuft durch Impervas Netz. Dort werden IP-Reputation, Anfragesignaturen und dein Verbindungs-Fingerprint geprüft, Tracking-Cookies gesetzt und bei Bedarf eine JavaScript- oder CAPTCHA-Challenge ausgeliefert.
  • Advanced Bot Protection. Eine zusätzliche Ebene darüber. Ein Sensor-Skript läuft im Browser, sammelt einen Geräte-Fingerprint, und daraus entsteht ein signiertes Token, das spätere Anfragen mitschicken müssen. Verhalten und Anfragerate werden pro Gerät bewertet, nicht nur pro IP.

Manche Seiten nutzen nur die Edge-Ebene. Die lassen sich oft mit einem guten HTTP-Client lösen. Seiten mit Advanced Bot Protection brauchen an irgendeiner Stelle fast immer einen echten Browser.

So Erkennst Du, Dass Du Es mit Imperva Zu Tun Hast

Bevor du etwas änderst, prüfe, womit du es zu tun hast. Imperva hinterlässt klare Spuren:

  • Response-Header. Ein X-Iinfo-Header taucht im Imperva-Traffic auf, auch bei erfolgreichen Antworten. Viele Seiten senden außerdem X-CDN: Imperva oder X-CDN: Incapsula.
  • Cookies. visid_incap_<Site-ID> (eine langlebige Besucher-ID), incap_ses_<n>_<Site-ID> (die Session) und nlbi_<Site-ID> (Load Balancing). Das Site-ID-Suffix bindet jedes Cookie an genau eine geschützte Seite.
  • Challenge-Cookies. ___utmvc gehört zur älteren JavaScript-Challenge. reese84 gehört zu Advanced Bot Protection. Beide werden per JavaScript gesetzt. Du siehst sie also im Cookie-Speicher des Browsers, nicht in der ersten HTTP-Antwort.
  • Markierungen im Body. “Request unsuccessful” mit einer “Incapsula incident ID”, ein Skript von /_Incapsula_Resource oder eine “Pardon Our Interruption”-Seite, die aus der Distil-Linie stammt.

Eine kleine Hilfsfunktion macht die Prüfung wiederholbar:

from curl_cffi import requests

COOKIE_PREFIXES = ("visid_incap_", "incap_ses_", "nlbi_", "reese84", "___utmvc")

def imperva_signals(resp):
    found = []
    if "x-iinfo" in resp.headers:
        found.append("X-Iinfo header")
    cdn = resp.headers.get("x-cdn", "")
    if "imperva" in cdn.lower() or "incapsula" in cdn.lower():
        found.append(f"X-CDN: {cdn}")
    found += [f"cookie {n}" for n in resp.cookies.keys() if n.startswith(COOKIE_PREFIXES)]
    return found

def is_imperva_block(html):
    if "Incapsula incident ID" in html or "Pardon Our Interruption" in html:
        return True
    # Echte Seiten können das Skript auch enthalten, also zählt nur eine winzige Seite
    return "_Incapsula_Resource" in html and len(html) < 5_000

resp = requests.get("https://www.example.com/", impersonate="chrome")
print(resp.status_code, imperva_signals(resp), is_imperva_block(resp.text))

Beachte, dass is_imperva_block den Body prüft und nicht den Statuscode. Das ist Absicht. Imperva kann seine Blockseite mit einem 200 ausliefern, und ein Scraper, der nur auf Fehler achtet, speichert dann fröhlich leere Seiten. Mehr dazu in unserem Artikel über Soft Blocks erkennen.

Wie Imperva Entscheidet, Dass Du ein Bot Bist

Stell es dir als eine Reihe von Toren vor. Scheitert eins, bist du geblockt.

1. Die Verbindung

Noch bevor ein einziges Byte HTML fließt, sieht die Edge deine IP und deinen TLS-Handshake. Rechenzentrums-IP-Bereiche und IPs mit Missbrauchshistorie starten mit einer niedrigen Bewertung. Der Handshake von Pythons requests sieht völlig anders aus als der von Chrome, und genau deshalb scheitert oft schon die allererste Anfrage. Die Details stehen in unserem Guide zu TLS-Fingerprinting.

Bei deinem ersten Besuch setzt Imperva die Besucher- und Session-Cookies. Spätere Anfragen sollen sie konsistent zurückschicken. Die Cookies sind miteinander und mit der Seite verknüpft: Ein Session-Cookie gehört zu einer Besucher-ID, und ein Cookie einer Imperva-Seite bedeutet auf einer anderen gar nichts. Ein Client, der Cookies verliert, veraltete schickt oder Cookies aus verschiedenen Sessions mischt, bekommt erneut eine Challenge.

3. Die JavaScript-Challenge

Ist die Edge nicht überzeugt, hält sie den Inhalt zurück und liefert eine Seite aus, die ein Skript lädt. Die ältere Variante, ausgeliefert von /_Incapsula_Resource, sammelt Browser-Eigenschaften und speichert ein verschlüsseltes Ergebnis im Cookie ___utmvc. Der neuere Sensor von Advanced Bot Protection sammelt einen deutlich größeren Fingerprint, schickt ihn an einen seitenspezifischen Pfad und erhält ein reese84-Token mit eingebautem Ablaufdatum. Dieses Token muss während des Surfens erneuert werden. Ein einfacher HTTP-Client führt keins der beiden Skripte aus und kommt daher nie an diesem Tor vorbei.

4. Verhalten über die Zeit

Einmal durchkommen ist nicht das Ende. Advanced Bot Protection bewertet die Session weiter: wie schnell du Seiten abrufst, ob du nur tiefe URLs aufrufst, ob derselbe Geräte-Fingerprint von vielen IPs kommt. Imperva beschreibt Rate Limits, die am Geräte-Fingerprint statt an der IP hängen. IP-Rotation allein setzt sie also nicht zurück.

Regeln werden außerdem pro Pfad gesetzt. Es ist üblich, dass die Startseite problemlos lädt, während Suchergebnisse, interne APIs oder Kontoseiten geblockt sind. Wenn deine Test-URL funktioniert und dein echtes Ziel nicht, liegt es meistens daran.

Warum Dein Scraper Scheitert

So passen die Tore zu den Symptomen, die du tatsächlich siehst:

  • Erste Anfrage wird immer geblockt: das Verbindungs-Tor. Dein TLS-Fingerprint oder deine IP ist das Problem.
  • Winzige Seite mit Skript und ohne Inhalt: die JavaScript-Challenge. Dein Client führt kein JavaScript aus.
  • Läuft ein paar Minuten, dann Block: Das Token ist abgelaufen und wurde nicht erneuert, oder deine Anfragerate hat die Verhaltensprüfung ausgelöst.
  • Startseite geht, Suche ist geblockt: eine strengere Regel auf diesem Pfad.
  • Geblockt in Playwright, kein Problem im eigenen Chrome: Der Automatisierungs-Browser selbst wird bewertet. Siehe warum dein Playwright-Browser Challenges bekommt.

So Kommst Du mit Open-Source-Tools Durch

Arbeite dich von der günstigsten Option nach oben und hör bei der ersten auf, die funktioniert.

Schritt 1: Nutze einen HTTP-Client mit Browser-Fingerprint

Wenn die Seite nur die Edge-Ebene nutzt, reicht oft ein Client, der einen echten Browser-Fingerprint für TLS und HTTP/2 sendet. curl_cffi mit impersonate="chrome" ist in Python die übliche Wahl. Nutze eine Session, damit die Imperva-Cookies aus der ersten Antwort bei den nächsten Anfragen mitgeschickt werden, und besuche die Startseite vor der tiefen URL:

from curl_cffi import requests

s = requests.Session(impersonate="chrome")
s.get("https://www.example.com/")  # holt die Cookies visid_incap_ und incap_ses_
resp = s.get(
    "https://www.example.com/c/toys",
    headers={"Referer": "https://www.example.com/"},
)
print(resp.status_code, is_imperva_block(resp.text))

Bekommst du weiterhin eine Challenge-Seite, prüft die Seite per JavaScript, und kein HTTP-Client kommt allein daran vorbei.

Schritt 2: Lass einen Echten Browser die Challenge Lösen

Für JavaScript-Challenges und reese84 brauchst du echtes Chrome. Nutze mit Playwright dein installiertes Chrome (channel="chrome"), starte es mit sichtbarem Fenster und behalte ein persistentes Profil, damit das Besucher-Cookie zwischen den Läufen erhalten bleibt. Ein wiederkehrender Besucher mit etwas Verlauf wirkt normaler als ein brandneues Profil bei jedem Lauf.

from playwright.sync_api import sync_playwright

URLS = [
    "https://www.example.com/c/toys?page=1",
    "https://www.example.com/c/toys?page=2",
]

with sync_playwright() as p:
    ctx = p.chromium.launch_persistent_context(
        "./imperva-profile", channel="chrome", headless=False, no_viewport=True
    )
    page = ctx.new_page()

    # Wie ein Besucher einsteigen und dem Sensor-Skript Zeit geben
    page.goto("https://www.example.com/", wait_until="networkidle")
    page.wait_for_timeout(3000)

    for url in URLS:
        page.goto(url, wait_until="domcontentloaded")
        html = page.content()
        if is_imperva_block(html):
            print("Blocked on", url)
            break
        # html hier parsen
        page.wait_for_timeout(2000)  # menschliches Tempo

    ctx.close()

Weil die Seite Impervas Skript weiter ausführt, erneuert der Browser das Token von selbst. Das ist der große Vorteil gegenüber dem einmaligen Abgreifen und Wiederverwenden von Cookies. Willst du die Cookies trotzdem an einen schnelleren HTTP-Client übergeben, behalte dieselbe IP und denselben User Agent und rechne damit, sie oft zu erneuern. Unser Guide zur Session-Persistenz zeigt dieses Muster Schritt für Schritt.

Wird ein Profil auf jeder Seite geblockt, lösch den Profilordner und fang neu an. Eine verbrannte Besucher-ID verfolgt dich überallhin.

Schritt 3: Kümmere Dich um die IP

Ist ein echter Browser schon auf der ersten Seite geblockt, schau dir deine IP an. Nutze Residential- oder Mobile-IPs von einem seriösen Anbieter und arbeite mit Sticky Sessions: eine IP für die gesamte Lebensdauer einer Browser-Session. Ein IP-Wechsel mitten in der Session bei gleichen Cookies ist ein starkes Bot-Signal. Playwright bekommt den Proxy beim Start:

ctx = p.chromium.launch_persistent_context(
    "./imperva-profile",
    channel="chrome",
    headless=False,
    proxy={"server": "http://proxy.example.net:8000", "username": "user", "password": "pass"},
)

Schritt 4: Langsamer Werden und Verteilen

Advanced Bot Protection beobachtet die ganze Session, also zählt das Tempo. Baue zufällige Pausen ein, begrenze die Seiten pro Session und lass mehrere getrennte Sessions laufen statt einer einzigen, die auf die Seite einhämmert. Jede Session bekommt ihr eigenes Profil, ihre eigene IP und ihren eigenen Cookie-Speicher. Teile niemals Cookies zwischen Sessions.

Halte deine Anfragerate vernünftig und respektiere die Nutzungsbedingungen der Seite. Höflichkeit ist auch der günstigste Weg, nicht geblockt zu werden.

FAQ

Ist Imperva dasselbe wie Incapsula?

Fürs Scraping ja. Incapsula war der ursprüngliche Name von Impervas Cloud-WAF- und CDN-Dienst. Der Name taucht weiterhin in Cookies (visid_incap_, incap_ses_) und in der Blockmeldung “Incapsula incident ID” auf.

Es enthält ein Token von Imperva Advanced Bot Protection. Ein Skript auf der Seite sammelt Browser- und Gerätesignale, schickt sie an die Seite und bekommt ein signiertes Token mit Ablaufdatum zurück. Anfragen ohne gültiges, frisches Token bekommen eine Challenge.

Kann ich Imperva-Cookies auf einer anderen Seite wiederverwenden?

Nein. Jedes Cookie trägt die ID der geschützten Seite, und das Session-Cookie ist an das Besucher-Cookie gebunden. Cookies einer Seite sind auf einer anderen nutzlos, und veraltete Cookies auf derselben Seite lösen eine neue Challenge aus.

Warum funktioniert die Startseite, aber die Suchergebnisse werden geblockt?

Imperva-Regeln werden pro Pfad konfiguriert. Seitenbetreiber schützen Suche, Preise und API-Endpunkte oft strenger als statische Seiten. Teste deinen Scraper immer mit den URLs, die du wirklich brauchst.

Wenn Du Das Lieber Nicht Selbst Pflegen Willst

Alles oben funktioniert, aber es ist laufende Arbeit: Browser-Versionen ändern sich, Tokens laufen ab, IPs verbrennen, und jede geschützte Seite ist ein bisschen anders eingestellt. Wenn du die Zeit lieber in die Daten steckst, nimmt ScrapeUnblocker eine URL entgegen und liefert die gerenderte Seite mit einem einzigen API-Aufruf zurück, auch bei Seiten hinter Imperva. Unser öffentlicher Benchmark enthält ein Incapsula-geschütztes Ziel, und die Dokumentation zeigt dir, wie du deine erste Anfrage in wenigen Minuten machst.

ScrapeUnblocker kostenlos testen

Über 95 % Erfolgsquote · ab 0,55 € pro 1.000 Aufrufe (ggf. zzgl. MwSt.) · 500 kostenlose Anfragen bei der Registrierung.

Kostenlos testen → Preise ansehen