Comparisons

Sticky Sessions vs. Rotating Sessions: Beste Proxy-Strategie für CAPTCHAs

Sticky-Sitzungen behalten für eine festgelegte Dauer dieselbe IP. Rotierende Sitzungen weisen pro Anfrage eine neue IP zu. Die Wahl der falschen Option erhöht die CAPTCHA-Raten und verschwendet API-Credits.


Wie jeder Modus funktioniert

STICKY SESSION:
  Request 1 ──▶ IP: 192.168.1.50 ──▶ site.com/login
  Request 2 ──▶ IP: 192.168.1.50 ──▶ site.com/dashboard
  Request 3 ──▶ IP: 192.168.1.50 ──▶ site.com/account
  (Same IP for all requests in the session window)

ROTATING SESSION:
  Request 1 ──▶ IP: 192.168.1.50 ──▶ site.com/page1
  Request 2 ──▶ IP: 10.0.0.77   ──▶ site.com/page2
  Request 3 ──▶ IP: 172.16.5.22 ──▶ site.com/page3
  (Different IP per request)

Direkter Vergleich

Faktor Klebrig Rotierend
IP pro Anfrage Dasselbe gilt für 1–30 Minuten Jede Anfrage neu
Sitzungskonsistenz Hoch Keine
CAPTCHA-Rate (mehrstufige Abläufe) Niedrig (5–10 %) Hoch (30–50 %)
CAPTCHA-Rate (Einzelseiten) Mittel (10–20 %) Niedrig (5–10 %)
Token-Gültigkeit Höher – gleiche IP Risiko einer Nichtübereinstimmung
Geschwindigkeit Schnell (verwendet die Verbindung wieder) Langsamer (neue Verbindung)
Verbotsrisiko Höher, wenn markiert Niedrig – jedes Mal neue IP
Kosten Gleich oder etwas mehr Das Gleiche
Am besten für Anmelden, Bezahlen, Authentifizieren Massen-Scraping, Suche

Wenn Sticky Sessions gewinnen

Mehrstufige Arbeitsabläufe

CAPTCHAs validieren Token anhand der anfragenden IP. Wenn sich Ihre IP zwischen Lösung und Übermittlung ändert, kann das Token abgelehnt werden.

import requests
import time

CAPTCHAAI_KEY = "YOUR_API_KEY"
CAPTCHAAI_URL = "https://ocr.captchaai.com"

# Sticky session: same IP for the entire login flow
STICKY_PROXY = {
    "http": "http://user-session-abc123:pass@proxy.example.com:5000",
    "https": "http://user-session-abc123:pass@proxy.example.com:5000",
}

session = requests.Session()
session.proxies = STICKY_PROXY
session.headers.update({
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
    "AppleWebKit/537.36 Chrome/126.0.0.0 Safari/537.36",
})


def login_with_captcha(url, sitekey, username, password):
    """Full login flow — MUST use same IP throughout."""
    # Step 1: Load login page (IP: 192.168.1.50)
    session.get(url)

    # Step 2: Solve CAPTCHA (solved against IP: 192.168.1.50)
    token = solve_recaptcha(sitekey, url)

    # Step 3: Submit login (MUST be IP: 192.168.1.50)
    resp = session.post(url, data={
        "username": username,
        "password": password,
        "g-recaptcha-response": token,
    })

    return resp.status_code == 200


def solve_recaptcha(sitekey, pageurl):
    resp = requests.post(f"{CAPTCHAAI_URL}/in.php", data={
        "key": CAPTCHAAI_KEY,
        "method": "userrecaptcha",
        "googlekey": sitekey,
        "pageurl": pageurl,
        "json": 1,
    })
    task_id = resp.json()["request"]

    for _ in range(60):
        time.sleep(5)
        result = requests.get(f"{CAPTCHAAI_URL}/res.php", params={
            "key": CAPTCHAAI_KEY, "action": "get",
            "id": task_id, "json": 1,
        })
        data = result.json()
        if data["request"] != "CAPCHA_NOT_READY":
            return data["request"]

    raise TimeoutError("CAPTCHA solve timeout")

Warum IP-Konsistenz wichtig ist

Sticky session:

  1. Browser loads page    → IP: 5.5.5.5
  2. CAPTCHA solved        → Token bound to session
  3. Form submitted        → IP: 5.5.5.5 ✅ Token accepted

Rotating session:

  1. Browser loads page    → IP: 5.5.5.5
  2. CAPTCHA solved        → Token bound to session
  3. Form submitted        → IP: 9.9.9.9 ❌ Token may be rejected

Wenn rotierende Sitzungen gewinnen

Bulk Page Scraping

Jede Seite ist unabhängig. Rotierende IPs verteilen Anfragen auf einen größeren Pool und reduzieren so die Erkennung pro IP.

import concurrent.futures

ROTATING_PROXY = {
    "http": "http://user:pass@rotating.proxy.example.com:5000",
    "https": "http://user:pass@rotating.proxy.example.com:5000",
}


def scrape_page(url):
    """Each request gets a fresh IP automatically."""
    resp = requests.get(
        url,
        proxies=ROTATING_PROXY,
        headers={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"},
        timeout=30,
    )
    if resp.status_code == 200:
        return url, resp.text
    return url, None


urls = [f"https://example.com/products?page={i}" for i in range(1, 501)]

with concurrent.futures.ThreadPoolExecutor(max_workers=10) as pool:
    results = list(pool.map(scrape_page, urls))
    success = sum(1 for _, html in results if html)
    print(f"Scraped: {success}/{len(urls)}")

Suchmaschinen-Scraping

Suchmaschinen verfolgen das Anfragevolumen pro IP. Rotieren vermeidet Ratenbegrenzungen:

def scrape_search(query, pages=10):
    results = []
    for page in range(pages):
        # Each request → new IP
        resp = requests.get(
            "https://search-engine.example.com/search",
            params={"q": query, "start": page * 10},
            proxies=ROTATING_PROXY,
            timeout=20,
        )
        results.append(resp.text)
        time.sleep(2)
    return results

Hybride Strategie

Verwenden Sie beide Modi in derselben Pipeline:

class HybridProxyManager:
    """Sticky for multi-step flows, rotating for single requests."""

    def __init__(self, provider_host, username, password, port=5000):
        self.host = provider_host
        self.username = username
        self.password = password
        self.port = port

    def get_rotating_proxy(self):
        return {
            "http": f"http://{self.username}:{self.password}@{self.host}:{self.port}",
            "https": f"http://{self.username}:{self.password}@{self.host}:{self.port}",
        }

    def get_sticky_proxy(self, session_id, duration_min=10):
        sticky_user = f"{self.username}-session-{session_id}-ttl-{duration_min}"
        return {
            "http": f"http://{sticky_user}:{self.password}@{self.host}:{self.port}",
            "https": f"http://{sticky_user}:{self.password}@{self.host}:{self.port}",
        }


proxy_mgr = HybridProxyManager("proxy.example.com", "user", "pass")


def scrape_with_auto_strategy(url, needs_login=False):
    if needs_login:
        # Multi-step → sticky
        import uuid
        session_id = uuid.uuid4().hex[:8]
        proxy = proxy_mgr.get_sticky_proxy(session_id)
    else:
        # Single page → rotating
        proxy = proxy_mgr.get_rotating_proxy()

    return requests.get(url, proxies=proxy, timeout=30)

Node.js-Implementierung

const axios = require("axios");

const CAPTCHAAI_KEY = "YOUR_API_KEY";
const PROXY_HOST = "proxy.example.com";
const PROXY_PORT = 5000;

function getProxy(mode, sessionId = null) {
  const user =
    mode === "sticky" ? `user-session-${sessionId}` : "user";

  return {
    proxy: {
      host: PROXY_HOST,
      port: PROXY_PORT,
      auth: { username: user, password: "pass" },
    },
  };
}

// Rotating: bulk scrape
async function scrapePages(urls) {
  const results = [];
  for (const url of urls) {
    const config = getProxy("rotating");
    const resp = await axios.get(url, { ...config, timeout: 30000 });
    results.push({ url, data: resp.data });
  }
  return results;
}

// Sticky: login flow
async function loginFlow(loginUrl, sitekey, credentials) {
  const sessionId = Date.now().toString(36);
  const config = getProxy("sticky", sessionId);

  // Step 1: Load page
  await axios.get(loginUrl, config);

  // Step 2: Solve CAPTCHA
  const submitResp = await axios.post(
    "https://ocr.captchaai.com/in.php",
    null,
    {
      params: {
        key: CAPTCHAAI_KEY,
        method: "userrecaptcha",
        googlekey: sitekey,
        pageurl: loginUrl,
        json: 1,
      },
    }
  );
  const taskId = submitResp.data.request;

  let token;
  for (let i = 0; i < 60; i++) {
    await new Promise((r) => setTimeout(r, 5000));
    const res = await axios.get("https://ocr.captchaai.com/res.php", {
      params: { key: CAPTCHAAI_KEY, action: "get", id: taskId, json: 1 },
    });
    if (res.data.request !== "CAPCHA_NOT_READY") {
      token = res.data.request;
      break;
    }
  }

  // Step 3: Submit with same IP
  return axios.post(
    loginUrl,
    {
      ...credentials,
      "g-recaptcha-response": token,
    },
    config
  );
}

Entscheidungsmatrix

Arbeitsablauf Empfohlen Warum
Anmelden/Registrieren Klebrig Token an IP gebunden
Kasse/Zahlung Klebrig Sitzungscookies benötigen dieselbe IP
Massenseiten-Scraping Rotierend Verteilt die Last
Suchmaschinen-Scraping Rotierend Vermeidet Ratenbegrenzungen pro IP
API-Abfrage (gleicher Endpunkt) Rotierend Reduziert den Browser-Signalprofil pro IP
Mehrseitige Navigation Klebrig Per IP verfolgte Cookies
Preisüberwachung Rotierend Viele unabhängige Anfragen
Kontoverwaltung Klebrig Sitzungsintegrität
Formularübermittlung mit CAPTCHA Klebrig Token-IP-Bindung
Anzeigenüberprüfung Rotierend Simulieren Sie verschiedene Benutzer

Sticky-Sitzungsdauer

Dauer Am besten für Risiko
1 Minute Schnelles Absenden des Formulars Kann mitten im Fluss ablaufen
5 Min Standardanmeldung + Aktionen Gute Balance
10 Min Komplexe mehrseitige Abläufe Moderates Verbotsrisiko
30 Min Erweiterte Browsersitzungen Höheres Verbotsrisiko
60 Min Lange Kontovorgänge Hohes Verbotsrisiko

Faustregel: Stellen Sie die Klebedauer auf das Doppelte Ihrer erwarteten Fließzeit ein.


Fehlerbehebung

Problem Ursache Lösung
CAPTCHA-Token wurde nach der Lösung abgelehnt IP hat sich zwischen Lösen und Senden geändert Wechseln Sie zur Sticky-Sitzung
Hohe CAPTCHA-Rate auf einzelnen Seiten Dieselbe Sticky-IP trifft auf zu viele Seiten Auf Rotieren umstellen
Sitzungscookies verloren Sticky-Sitzung ist abgelaufen Erhöhen Sie die TTL-Dauer
Langsam rotierende Leistung Verbindungsaufwand pro neuer IP Verwenden Sie Verbindungspooling
Gesperrte IP in Sticky Session Alle Anfragen teilen sich die gekennzeichnete IP Reduzieren Sie die Sitzungs-TTL oder fügen Sie Verzögerungen hinzu

FAQ

Kann ich „Sticky“ und „Rotating“ in einem Projekt kombinieren?

Ja. Verwenden Sie den Hybridansatz – Sticky für Authentifizierungsabläufe, rotierend für die Datenerfassung. Die meisten Proxy-Anbieter unterstützen beide Modi im selben Plan.

Garantiert eine Sticky Session die gleiche IP?

Die meisten Anbieter garantieren dies innerhalb des TTL-Fensters. Wenn die IP nicht mehr verfügbar ist (Neuzuweisung des Netzbetreibers, Poolrotation), wird eine neue IP zugewiesen.

Welcher Modus ist günstiger?

Gleicher Preis – Sie zahlen pro GB oder pro Anfrage, unabhängig vom Modus. Der Kostenunterschied ergibt sich aus den CAPTCHA-Raten: falscher Modus → mehr CAPTCHAs → höhere CaptchaAI Ausgaben.

Wie richte ich Sticky Sessions bei meinem Proxy-Anbieter ein?

Die meisten verwenden eine Sitzungs-ID im Benutzernamen: user-session-abc123. Das genaue Format finden Sie in den Dokumenten Ihres Anbieters. Wir decken abHelle Daten,Smartproxy, UndOxylabsin speziellen Leitfäden.


Verwandte Leitfäden


Passen Sie Ihre Proxy-Strategie an Ihren Workflow an – Holen Sie sich Ihren CaptchaAI-Schlüsselum CAPTCHAs in jedem Sitzungsmodus zu verarbeiten.

Kommentare sind für diesen Artikel deaktiviert.

Verwandte Beiträge

Comparisons Headless vs. Headed Chrome für CAPTCHA-Tests in eigener QA
Wann sich Headless-Chrome und wann Headed-Chrome für CAPTCHA-Tests in eigenen CI- und QA-Pipelines eignet, und welche Auswirkungen die Wahl auf Stabilität und L...

Wann sich Headless-Chrome und wann Headed-Chrome für CAPTCHA-Tests in eigenen CI- und QA-Pipelines eignet, und...

Apr 17, 2026
Comparisons WebDriver vs. Chrome DevTools Protocol in eigener CAPTCHA-QA
Vergleich von Web Driver und Chrome Dev Tools Protocol für QA-Tests gegen die eigene CAPTCHA-Integration: Stärken, Grenzen und Einsatzempfehlungen.

Vergleich von Web Driver und Chrome Dev Tools Protocol für QA-Tests gegen die eigene CAPTCHA-Integration: Stär...

Apr 17, 2026