Wenn Cloudflare einen Besucher als verdächtig markiert, stellt es eine Interstitial-Challenge-Seite bereit. Sobald das Problem gelöst ist, empfängt der Browser ein cf_clearance-Cookie, das den Zugriff für die Sitzung gewährt. In diesem Leitfaden wird erläutert, wie der Challenge-Flow funktioniert und wie CaptchaAI damit umgeht.
So funktionieren Cloudflare Challenge-Seiten
- Der Benutzer fordert eine durch Cloudflare geschützte Seite an
- Cloudflare wertet Risikosignale aus (IP-Reputation, Header, TLS-Fingerprint)
- Wenn es markiert ist, gibt Cloudflare einen 403 oder 503 mit einer JavaScript-Herausforderungsseite zurück
- Auf der Herausforderungsseite werden Browserprüfungen durchgeführt und möglicherweise ein Turnstile-Widget angezeigt
- Bei Erfolg setzt Cloudflare
cf_clearanceund leitet zur ursprünglichen URL weiter - Nachfolgende Anfragen mit dem Cookie werden ohne Herausforderung weitergeleitet
Das cf_clearance-Cookie
| Eigentum | Einzelheiten |
|---|---|
| Name | cf_clearance |
| Domäne | Ziel-Site-Domain (z. B. .example.com) |
| Pfad | / |
| Lebenszeit | Normalerweise 30 Minuten bis 24 Stunden |
| HttpOnly | Ja |
| Sicher | Ja (nur HTTPS) |
| SameSite | Keine |
Das Cookie ist an mehrere Faktoren gebunden:
- IP-Adresse – Die Verwendung des Cookies von einer anderen IP-Adresse schlägt normalerweise fehl
- User-Agent – Muss mit dem UA übereinstimmen, der beim Lösen der Herausforderung verwendet wird
- TLS-Browser-Signalprofil – Einige Konfigurationen werden an den TLS-ClientHello gebunden
Herausforderungstypen
Cloudflare bedient verschiedene Herausforderungsstufen:
| Herausforderung | Antwortcode | Benutzerinteraktion | Beschreibung |
|---|---|---|---|
| JS-Herausforderung | 503 | Keine | Nur JavaScript-Ausführung |
| Herausforderung gemanagt | 403 | Vielleicht | Cloudflare entscheidet – kann das Turnstile zeigen oder lautlos passieren |
| Interaktive Herausforderung | 403 | Ja | Zeigt immer ein Turnstile-Widget an |
CaptchaAI löst alle drei Typen mit dem Cloudflare Challenge-Löser.
Lösung mit CaptchaAI
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)}...`);
Verwendung des gelösten Tokens
Fügen Sie nach dem Lösen das Token in die Herausforderungsseite ein, um cf_clearance zu erhalten:
# 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]}...")
Wiederverwendung des Cookies
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
Cookie-Lebensdauer und Aktualisierung
Das cf_clearance-Cookie läuft ab. Plan zur Neulösung:
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
Fehlerbehebung
| Problem | Ursache | Lösung |
|---|---|---|
| Cookie wurde nach Lösung abgelehnt | IP-Nichtübereinstimmung | Verwenden Sie für Lösungen und Anfragen denselben Proxy |
| Cookie läuft schnell ab | Von der Website festgelegte kurze TTL | Vor Ablauf erneut lösen; Überprüfen Sie das Feld expiry |
| 403 trotz gültigem Cookie | Nichtübereinstimmung zwischen Benutzer und Agent | Passen Sie UA zwischen Lösungs- und Anforderungssitzungen an |
| Challenge-Seite wird nicht geladen | JavaScript deaktiviert | Verwenden Sie einen Vollbrowser (Selenium, Puppeteer) |
FAQ
Kann ich cf_clearance zwischen verschiedenen Maschinen teilen?
Nur wenn sie dieselbe IP haben und Sie mit der User-Agent-Zeichenfolge übereinstimmen. Cloudflare verknüpft das Cookie häufig mit der Ursprungs-IP.
Wie lange dauert cf_clearance?
Normalerweise 30 Minuten bis 24 Stunden, abhängig von der Cloudflare-Konfiguration des Websitebesitzers.
Lösen Sie Cloudflare Challenge-Seiten mit CaptchaAI
Holen Sie sich Ihren API-Schlüssel unter captchaai.com.
Verwandte Leitfäden
- Cloudflare Turnstile Sitekey-Extraktion
- Cloudflare Turnstile vs. reCAPTCHA
- reCAPTCHA-Cookie-Anforderungen