cf_clearance ist das Cookie, das Cloudflare ausstellt, sobald ein Besucher eine Challenge bestanden hat – ohne dieses Cookie bleibt eine geschützte Seite für Ihre Automatisierung unerreichbar. Sie brauchen also zweierlei: ein gültiges Cookie und eine Sitzung, die zu den Bedingungen seiner Erzeugung passt. Dieser Leitfaden zeigt den Challenge-Flow, die bindenden Faktoren und wie Sie das Cookie mit CaptchaAI erzeugen, wiederverwenden und erneuern.
Voraussetzungen für den Ablauf
Bevor Sie das erste Cookie erzeugen, sollten diese vier Bausteine stehen:
- ein CaptchaAI-API-Schlüssel
- ein vollwertiger Browser für das Lösen (Selenium oder Puppeteer)
- ein fester Proxy, der für Lösung und Abfragen identisch bleibt
- die exakte Ziel-URL hinter der Cloudflare-Challenge
Stimmen diese Bausteine, folgt der Ablauf aus Lösung, Token-Einsatz und Wiederverwendung fast von selbst.
Was das cf_clearance-Cookie ist
| Eigenschaft | Details |
|---|---|
| Name | cf_clearance |
| Domain | Domain der Ziel-Site (z. B. .example.com) |
| Pfad | / |
| Gültigkeitsdauer | typischerweise 30 Minuten bis 24 Stunden |
| HttpOnly | ja |
| Secure | ja (nur HTTPS) |
| SameSite | None |
Das Cookie ist an mehrere Merkmale der Sitzung gebunden. Weicht eines ab, verwirft Cloudflare es – der häufigste Grund für ein hartnäckiges 403 trotz gültigem Cookie.
- IP-Adresse – ein Wechsel der IP macht das Cookie meist ungültig
- User-Agent – muss mit dem UA aus dem Lösungsvorgang übereinstimmen
- TLS-Fingerprint – manche Konfigurationen binden an den TLS-ClientHello
Hinweis: Ein
cf_clearance-Cookie ersetzt keine saubere Anfrage-Signatur. Passen IP, User-Agent und TLS-Profil nicht zusammen, hilft auch ein frisch gelöstes Cookie nicht weiter.
Welche Challenge-Stufen es gibt
Cloudflare staffelt die Challenge nach Risiko – die Stufe entscheidet über sichtbare Interaktion:
| Challenge-Stufe | Antwortcode | Interaktion | Beschreibung |
|---|---|---|---|
| JS Challenge | 503 | keine | reine JavaScript-Ausführung |
| Managed Challenge | 403 | ggf. | Cloudflare entscheidet – zeigt ggf. Turnstile oder lässt still passieren |
| Interactive Challenge | 403 | ja | zeigt immer ein Turnstile-Widget |
CaptchaAI verarbeitet alle drei Stufen über den Cloudflare-Challenge-Löser.
Kurz gesagt: Nur die Interactive Challenge verlangt zwingend ein Widget – die beiden anderen Stufen können ohne sichtbare Interaktion durchlaufen.
So läuft der Cloudflare-Challenge-Flow ab
- Ein Client fordert eine geschützte Seite an
- Cloudflare bewertet Risikosignale (IP-Reputation, Header, TLS-Fingerprint)
- Bei Verdacht folgt 403 oder 503 mit einer JavaScript-Challenge-Seite
- Die Seite führt Browser-Prüfungen aus und blendet ggf. ein Turnstile-Widget ein
- Nach bestandener Prüfung setzt Cloudflare
cf_clearanceund leitet zur Ziel-URL weiter - Folgeanfragen mit dem Cookie passieren ohne erneute Challenge
cf_clearance mit CaptchaAI erzeugen
Erster Schritt ist das Lösen der Challenge über die API. Der Ablauf besteht aus zwei Aufrufen:
- Übermitteln (
in.php): Sie sendenmethod,sitekeyundpageurlund erhalten eine Task-ID zurück. - Abfragen (
res.php): Sie pollen mit der Task-ID, bis das gelöste Token vorliegt.
Python
import requests
import time
API_KEY = "YOUR_API_KEY"
TARGET_URL = "https://example.com/protected-page"
# Submit Cloudflare Challenge task
resp = requests.post("https://ocr.captchaai.com/in.php", data={
"key": API_KEY,
"method": "turnstile",
"sitekey": "0x0000000000000000000000", # may be generic for CF challenge
"pageurl": TARGET_URL,
"json": "1",
}).json()
if resp["status"] != 1:
raise Exception(f"Submit error: {resp['request']}")
task_id = resp["request"]
print(f"Task ID: {task_id}")
# Poll for result
for _ in range(30):
time.sleep(5)
result = requests.get("https://ocr.captchaai.com/res.php", params={
"key": API_KEY, "action": "get", "id": task_id, "json": "1"
}).json()
if result["status"] == 1:
token = result["request"]
print(f"Token received: {token[:50]}...")
break
if result["request"] != "CAPCHA_NOT_READY":
raise Exception(f"Error: {result['request']}")
JavaScript
const axios = require('axios');
const API_KEY = 'YOUR_API_KEY';
const TARGET_URL = 'https://example.com/protected-page';
const submit = await axios.post('https://ocr.captchaai.com/in.php', null, {
params: {
key: API_KEY,
method: 'turnstile',
sitekey: '0x0000000000000000000000',
pageurl: TARGET_URL,
json: 1,
}
});
const taskId = submit.data.request;
// Poll
let token = null;
for (let i = 0; i < 30; i++) {
await new Promise(r => setTimeout(r, 5000));
const poll = await axios.get('https://ocr.captchaai.com/res.php', {
params: { key: API_KEY, action: 'get', id: taskId, json: 1 }
});
if (poll.data.status === 1) {
token = poll.data.request;
break;
}
}
console.log(`Token: ${token.substring(0, 50)}...`);
Token einsetzen und cf_clearance auslesen
Das Token ist noch kein Cookie. Tragen Sie es in das Antwortfeld der Challenge-Seite ein und senden das Formular ab – erst danach setzt Cloudflare cf_clearance.
Wichtig: Das gelöste Token ist nur kurz gültig (rund 120 Sekunden). Setzen Sie es sofort ein, statt es zwischenzuspeichern.
# With Selenium
from selenium import webdriver
driver = webdriver.Chrome()
driver.get(TARGET_URL) # Load the challenge page
# Inject token into Turnstile response field
driver.execute_script("""
const input = document.querySelector('input[name="cf-turnstile-response"]');
if (input) input.value = arguments[0];
// Trigger form submit or callback
const form = document.querySelector('form');
if (form) form.submit();
""", token)
# Wait for redirect and extract cookies
import time
time.sleep(3)
cookies = driver.get_cookies()
cf_clearance = next(
(c for c in cookies if c['name'] == 'cf_clearance'), None
)
if cf_clearance:
print(f"cf_clearance: {cf_clearance['value'][:30]}...")
Cookie in einer HTTP-Sitzung wiederverwenden
Für Folgeanfragen genügt eine schlanke requests-Sitzung – solange IP und User-Agent gleich bleiben:
session = requests.Session()
session.cookies.set("cf_clearance", cf_clearance["value"], domain=".example.com")
session.headers.update({
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
})
# Now access protected pages
resp = session.get("https://example.com/api/data")
print(resp.status_code) # 200
Praxisbeispiel: Wer Worker auf einem Hetzner-Server betreibt und die Challenge über einen Rechenzentrums-Proxy löst, muss diesen Proxy auch für alle Folgeanfragen setzen. DSGVO-Hinweis: IP-Adressen sind personenbezogene Daten – prüfen Sie Datenfluss und Rechtsgrundlage.
IP, User-Agent und Sitzung konsistent halten
cf_clearance validiert nur, solange die Sitzung unverändert bleibt. Cloudflare bindet das Cookie an die Bedingungen seiner Entstehung – halten Sie diese über den gesamten Ablauf konstant:
- Ein Proxy pro Cookie. Lösung und Abfragen laufen über dieselbe IP. Rotieren Sie erst, wenn Sie für die neue IP ein neues Cookie erzeugt haben.
- User-Agent einfrieren. Der UA aus dem Lösungsvorgang muss in jeder Folgeanfrage identisch gesetzt sein – bis hin zur Versionsnummer.
- Cookie je Domain speichern.
cf_clearancegilt nur für die Domain, die es ausgestellt hat; verwalten Sie pro Ziel-Domain einen eigenen Eintrag.
So bleibt eine einmal gelöste Challenge über die gesamte Gültigkeitsdauer nutzbar, statt bei jeder Anfrage erneut aufzutauchen.
Praxis: Verwalten Sie pro Proxy-IP ein eigenes
cf_clearance-Cookie in einem Store wie Redis – so laufen mehrere Worker parallel, ohne sich gegenseitig die Sitzung zu entwerten.
Typische Fehler und ihre Ursachen
| Symptom | Ursache | Lösung |
|---|---|---|
| Cookie wird nach dem Lösen abgelehnt | IP stimmt nicht überein | für Lösung und Anfragen denselben Proxy verwenden |
| Cookie läuft sehr schnell ab | kurze TTL der Website | vor Ablauf erneut lösen; Feld expiry prüfen |
| 403 trotz gültigem Cookie | abweichender User-Agent | UA zwischen Lösungs- und Anfrage-Sitzung angleichen |
| Challenge-Seite lädt nicht | JavaScript deaktiviert | vollwertigen Browser nutzen (Selenium, Puppeteer) |
Cookie-Gültigkeit prüfen und erneuern
Das cf_clearance-Cookie läuft ab. Prüfen Sie die Gültigkeit vorab und lösen bei Bedarf neu:
import datetime
def is_cookie_valid(cookie):
if not cookie:
return False
expiry = cookie.get("expiry", 0)
return datetime.datetime.now().timestamp() < expiry - 60 # 60s buffer
def get_or_refresh_clearance(driver, target_url, solve_func):
cookies = driver.get_cookies()
cf = next((c for c in cookies if c["name"] == "cf_clearance"), None)
if is_cookie_valid(cf):
return cf["value"]
# Re-solve
token = solve_func(target_url)
# ... inject and extract new cookie
Tipp: Lösen Sie proaktiv mit einem Zeitpuffer neu, statt auf den ersten 403 zu reagieren – so bricht kein laufender Scraping-Job mitten in einem Batch ab.
FAQ
Warum wird mein cf_clearance-Cookie trotz gelöster Challenge mit 403 abgewiesen?
Meist stimmt die Sitzung nicht überein. Cloudflare bindet das Cookie an IP und User-Agent – lösen Sie über einen anderen Proxy oder UA als Ihre Folgeanfragen, wird es verworfen.
Funktioniert cf_clearance mit rotierenden Proxys?
Nein. Das Cookie ist an die IP gebunden, die es erzeugt hat – eine Rotation bricht es sofort. Lösen Sie pro IP eine eigene Challenge und verwalten je Proxy ein eigenes Cookie.
Wie lange bleibt ein cf_clearance-Cookie gültig?
Typischerweise 30 Minuten bis 24 Stunden – die genaue Dauer legt der Website-Betreiber fest. Lesen Sie das Feld expiry aus, statt sich auf einen festen Wert zu verlassen.
Brauche ich einen echten Browser oder reicht ein HTTP-Client wie requests?
Zum Lösen der Challenge brauchen Sie einen vollwertigen Browser (Selenium, Puppeteer), weil die Seite JavaScript ausführt. Für die Datenabfragen danach reicht eine requests-Sitzung mit demselben Cookie, derselben IP und demselben User-Agent.
Wie wird das Lösen von Cloudflare-Challenges abgerechnet?
CaptchaAI rechnet Thread-basiert ab, nicht pro Lösung: Jeder Plan enthält eine feste Zahl gleichzeitiger Threads und unbegrenzte Lösungen pro Thread. BASIC kostet 15 $/Monat mit 5 Threads, ADVANCE 90 $/Monat mit 50 Threads – der Durchsatz hängt an Ihrer Thread-Zahl, nicht an einem Preis pro Cookie.
Cloudflare-Challenges mit CaptchaAI lösen
Holen Sie sich Ihren API-Schlüssel auf captchaai.com und erzeugen Sie Ihr erstes cf_clearance-Cookie in Minuten.