Zurück zum Blog

Wie man Cookie-Probleme über einen Proxy behebt

Cookies werden bei der Arbeit über einen Proxy häufig zur Problemquelle. Erfahren Sie, warum dies geschieht und wie Sie deren Verarbeitung richtig konfigurieren.

📅8. Dezember 2025
```html

Wie man Cookie-Probleme über Proxy behebt

Cookies sind eine der häufigsten Fehlerquellen bei der Arbeit mit Proxys. Sitzungen werden unterbrochen, die Authentifizierung schlägt fehl, Daten gehen verloren. In diesem Artikel werden wir verstehen, warum dies geschieht und wie Sie die Cookie-Verarbeitung für stabilen Betrieb richtig konfigurieren.

Warum Cookies bei der Verwendung eines Proxys verloren gehen

Wenn Sie eine Anfrage über einen Proxy senden, wird zwischen Ihrem Client und dem Zielserver ein Zwischenknoten eingefügt. Dies erzeugt mehrere Probleme:

  • Unterschiedliche IP-Adressen für eine Sitzung. Der Server kann bemerken, dass Anfragen von verschiedenen Adressen kommen, und Cookies als verdächtig ablehnen.
  • Verlust von Set-Cookie-Headern. Eine fehlerhafte Proxy-Konfiguration kann Set-Cookie-Header nicht an den Client weitergeben.
  • Domain- und Pfad-Nichtübereinstimmung. Wenn der Proxy den Host-Header umschreibt, werden Cookies möglicherweise nicht gespeichert, da die Domain nicht übereinstimmt.
  • Fehlende Zustandsspeicherung. Wenn Sie jede Anfrage separat senden, ohne Cookies zu speichern, geht die Sitzung verloren.

Ein Cookie Jar ist ein Speicher für Cookies, der deren Versand und Empfang automatisch verwaltet. Anstatt manuell Cookie-Header zu jeder Anfrage hinzuzufügen, lassen Sie die Bibliothek dies automatisch tun.

Die meisten HTTP-Clients haben integrierte Cookie-Jar-Unterstützung:

import requests
from requests.cookies import RequestsCookieJar

# Erstellen Sie ein Jar zum Speichern von Cookies
jar = RequestsCookieJar()

# Erste Anfrage — der Server sendet Set-Cookie
response1 = requests.get(
    'https://example.com/login',
    cookies=jar,
    proxies={'https': 'http://proxy.example.com:8080'}
)

# Cookies werden automatisch im Jar gespeichert
print(jar)

# Zweite Anfrage — Cookies werden automatisch gesendet
response2 = requests.get(
    'https://example.com/dashboard',
    cookies=jar,
    proxies={'https': 'http://proxy.example.com:8080'}
)

Ohne Jar müssten Sie Set-Cookie manuell parsen und zu der nächsten Anfrage hinzufügen — das ist unzuverlässig und umständlich.

Speicherung von Cookies zwischen Anfragen

Wenn Ihr Skript lange läuft oder Sie eine Sitzung nach einem Neustart wiederherstellen müssen, speichern Sie Cookies in einer Datei:

import requests
from http.cookiejar import LWPCookieJar

# Erstellen Sie ein Jar mit Speicherung in einer Datei
jar = LWPCookieJar('cookies.txt')

# Laden Sie alte Cookies, falls vorhanden
try:
    jar.load(ignore_discard=True, ignore_expires=True)
except FileNotFoundError:
    pass

# Verwenden Sie das Jar in Anfragen
response = requests.get(
    'https://example.com/login',
    cookies=jar,
    proxies={'https': 'http://proxy.example.com:8080'}
)

# Speichern Sie aktualisierte Cookies
jar.save(ignore_discard=True, ignore_expires=True)

Die Flags ignore_discard=True und ignore_expires=True ermöglichen das Speichern auch temporärer Cookies.

Probleme mit der Domain-Bindung von Cookies

Cookies haben ein Domain-Attribut, das bestimmt, für welche Domains sie gesendet werden. Probleme entstehen, wenn:

  • Der Proxy schreibt den Host um. Wenn der Proxy den Host-Header ändert, kann das Cookie Jar das Cookie als zu einer anderen Domain gehörend ablehnen.
  • Subdomains stimmen nicht überein. Ein Cookie für example.com wird möglicherweise nicht an api.example.com gesendet.
  • Der Pfad stimmt nicht überein. Ein Cookie für /api wird nicht an /admin gesendet.

Überprüfen Sie die Cookie-Attribute wie folgt:

import requests

response = requests.get(
    'https://example.com',
    proxies={'https': 'http://proxy.example.com:8080'}
)

# Geben Sie alle Cookies aus
for cookie in response.cookies:
    print(f"Name: {cookie.name}")
    print(f"Value: {cookie.value}")
    print(f"Domain: {cookie.domain}")
    print(f"Path: {cookie.path}")
    print(f"Secure: {cookie.secure}")
    print(f"HttpOnly: {cookie.has_nonstandard_attr('HttpOnly')}")
    print("---")

Wenn die Domain zu eng ist, versuchen Sie, Cookies explizit anzugeben, anstatt automatische Verwaltung zu verwenden:

headers = {
    'Cookie': 'session_id=abc123; user_token=xyz789'
}

response = requests.get(
    'https://example.com/api',
    headers=headers,
    proxies={'https': 'http://proxy.example.com:8080'}
)

Secure- und HttpOnly-Flags

Das Flag Secure bedeutet, dass das Cookie nur über HTTPS gesendet wird. Wenn Sie einen HTTP-Proxy für den Zugriff auf eine HTTPS-Ressource verwenden, stellen Sie sicher, dass die Verbindung zum Proxy geschützt ist oder dass der Proxy HTTPS korrekt durchleitet.

Das Flag HttpOnly verbietet den Zugriff auf das Cookie aus JavaScript. Dies beeinflusst nicht das Versenden des Cookies in Anfragen, aber es ist wichtig zu beachten, dass Sie solche Cookies nicht aus dem Browser lesen können.

Bei der Arbeit mit Residential Proxys stellen Sie sicher, dass:

  • Der Proxy HTTPS unterstützt (CONNECT-Methode)
  • Zertifikate gültig sind (verwenden Sie nicht verify=False in der Produktion)
  • Header werden nicht vom Proxy umgeschrieben

Praktische Beispiele mit Code

Beispiel 1: Anmeldung mit Sitzungsspeicherung

import requests
from requests.cookies import RequestsCookieJar

jar = RequestsCookieJar()
proxy = 'http://proxy.example.com:8080'

# Anmeldung
login_response = requests.post(
    'https://example.com/login',
    data={'username': 'user', 'password': 'pass'},
    cookies=jar,
    proxies={'https': proxy}
)

if login_response.status_code == 200:
    print("Anmeldung erfolgreich")
    
    # Verwenden Sie die gespeicherte Sitzung
    dashboard = requests.get(
        'https://example.com/dashboard',
        cookies=jar,
        proxies={'https': proxy}
    )
    print(dashboard.text)

Beispiel 2: Verarbeitung mehrerer Anfragen

import requests
from http.cookiejar import LWPCookieJar
import time

jar = LWPCookieJar('session.txt')
try:
    jar.load(ignore_discard=True)
except:
    pass

proxy = 'http://proxy.example.com:8080'
urls = [
    'https://example.com/page1',
    'https://example.com/page2',
    'https://example.com/page3'
]

for url in urls:
    response = requests.get(
        url,
        cookies=jar,
        proxies={'https': proxy},
        timeout=10
    )
    print(f"{url}: {response.status_code}")
    jar.save(ignore_discard=True)
    time.sleep(1)  # Überlasten Sie den Server nicht

Beispiel 3: Explizite Cookie-Übergabe bei Problemen

import requests

proxy = 'http://proxy.example.com:8080'

# Wenn automatische Verwaltung nicht funktioniert
cookies_dict = {
    'session_id': 'abc123def456',
    'user_pref': 'dark_mode'
}

headers = {
    'User-Agent': 'Mozilla/5.0...',
    'Cookie': '; '.join([f"{k}={v}" for k, v in cookies_dict.items()])
}

response = requests.get(
    'https://example.com/api/data',
    headers=headers,
    proxies={'https': proxy}
)

print(response.json())

Debugging von Cookie-Problemen

Wenn Cookies nicht funktionieren, verwenden Sie diese Tools:

Tool Zweck
requests.Session Verwaltet Cookies automatisch für alle Anfragen in einer Sitzung
logging Aktivieren Sie DEBUG für Requests, um alle Header zu sehen
Fiddler / Charles Fangen Sie den Datenverkehr ab und sehen Sie Set-Cookie- und Cookie-Header
curl -v Testen Sie dasselbe über einen Proxy von der Befehlszeile aus

Aktivieren Sie Logging zum Debuggen:

import logging
import requests

logging.basicConfig(level=logging.DEBUG)

# Jetzt werden alle Anfragen Header und Cookies ausgeben
response = requests.get(
    'https://example.com',
    proxies={'https': 'http://proxy.example.com:8080'}
)

Überprüfen Sie, dass der Proxy Cookies nicht blockiert:

curl -v -x http://proxy.example.com:8080 https://example.com

# Achten Sie auf Header:
# Set-Cookie: ... (sollten vorhanden sein)
# Cookie: ... (sollten in der nächsten Anfrage gesendet werden)

Tipp: Wenn Sie Residential Proxys verwenden, beachten Sie, dass diese die IP zwischen Anfragen rotieren können. Stellen Sie sicher, dass Ihre Cookie-Verarbeitungslogik dies berücksichtigt — einige Server lehnen Anfragen von verschiedenen IPs in einer Sitzung ab.

Zusammenfassung

Cookie-Probleme bei der Arbeit über einen Proxy werden durch richtige Konfiguration gelöst:

  • Verwenden Sie Cookie Jar für automatische Cookie-Verwaltung
  • Speichern Sie Cookies zwischen Anfragen in einer Datei
  • Überprüfen Sie Domain-Bindung und Path-Attribute
  • Stellen Sie sicher, dass der Proxy HTTPS unterstützt
  • Verwenden Sie Debugging, um Probleme zu identifizieren

Für Automatisierungs- und Parsing-Aufgaben, bei denen zuverlässige Sitzungsarbeit über einen Proxy erforderlich ist, sind Residential Proxys mit HTTPS-Unterstützung und Cookie-Verwaltung geeignet. Beginnen Sie mit einem einfachen Cookie Jar und wechseln Sie nur zu komplexeren Schemata, wenn nötig.

```