Kısa yanıt: Cloudflare doğrulama akışı, korumalı bir sayfayı açmadan önce tarayıcınızı denetleyen tam sayfa bir ara doğrulama ekranıdır — ve otomasyon tarafında asıl önemli çıktısı, doğrulamayı tamamladığınızda verilen qa_session_cookie çerezidir. Bu çerez olmadan her istek yeniden aynı ekrana takılır.
Bunu, sayfaya gömülen Turnstile widget'ıyla karıştırmayın: Turnstile küçük bir onay kutusu, doğrulama akışı ise tüm sayfayı bloke eden bir kapıdır. Otomasyon açısından üç nokta önemlidir:
- doğrulama akışı tüm sayfayı bloke eder, Turnstile etmez
- çözümün çıktısı bir token değil,
qa_session_cookieçerezidir - çerez IP'ye bağlı olduğundan çözüm sabit bir proxy ister
Doğrulama akışı, Turnstile ve JS Challenge farkı
Hangi katmanla karşılaştığınızı, sayfanın tam sayfa mı yoksa gömülü widget mı olduğuna bakarak anlarsınız:
| Özellik | CF doğrulama akışı | Turnstile | JS Challenge |
|---|---|---|---|
| Tür | Tam sayfa ara ekran | Sayfa içi widget | Sessiz kontrol |
| Kullanıcı ne görür | "Tarayıcınız kontrol ediliyor" sayfası | Onay kutusu veya hiçbir şey | Hiçbir şey |
| Sayfa erişimini engeller | Evet | Hayır | Kısa süre |
| qa_session_cookie yazar | Evet | Bazen | Evet |
| Çözmek için proxy gerekir | Evet | Hayır | Yok |
| Site Cloudflare CDN kullanır | Zorunlu | İsteğe bağlı | Zorunlu |
Çözüm yöntemleri nasıl ayrışır?
Doğrulama akışını çerez + oturum bazlı, Turnstile'ı ise token bazlı çözersiniz; JS Challenge çoğu zaman kullanıcıdan hiçbir işlem istemez.
Adım adım nasıl işler?
Request → Cloudflare proxy → Suspicious? → Challenge page
↓
Browser verification
↓
qa_session_cookie cookie set
↓
Original page loads
- İstek yakalandı — Ters proxy gelen isteği değerlendirir
- Risk değerlendirmesi — IP itibarı, HTTP başlıkları, TLS test profil yapılandırması ve davranış incelenir
- Doğrulama sayfası sunuldu — Şüpheli istekte yanıt yerine doğrulama sayfası döner
- Tarayıcı doğrulaması — Tarayıcıda çalıştırılan JavaScript denetimleri
- Çerez yazıldı — Başarıda
qa_session_cookieçerezi bir TTL ile yazılır - Erişim verildi — Tarayıcı sayfayı yeniden yükler ve içeriği alır
Neden ham istemci yetmez?
3 ve 4. adımlar gerçek bir tarayıcıyı hedefler: JavaScript çalıştırmayan ham bir HTTP istemcisi tam burada takılır. Bu yüzden doğrulama akışını çözmek, statik bir yanıtı ayrıştırmaktan temelde farklı bir iştir.
Doğrulama akışını ne tetikler?
- Veri merkezi IP'si — bilinen barındırma sağlayıcılarından gelen istek
- Eksik başlıklar — eksik veya olağandışı HTTP başlıkları
- TLS test profil yapılandırması — JA3/JA4 imzası bilinen bot imzalarıyla eşleşiyor
- Yüksek istek oranı — aynı IP'den çok fazla istek
- Güvenlik düzeyi — site sahibi doğrulama eşiğini yüksek belirlemiş
- Bot puanı — Cloudflare'in ML bot puanı çok düşük
Çoğu QA otomasyonu ilk iki madde yüzünden takılır: CI sunucuları veri merkezi IP'lerinden çıkar.
qa_session_cookie çerezi ve neden proxy şart?
Doğrulama sonrası tarayıcı şu çerezi alır:
qa_session_cookie=abc123...; path=/; domain=.example.com; secure; HttpOnly; SameSite=None
- Süre: 15 dakika ila 24 saat (site sahibi belirler)
- Kapsam: belirli bir alan adına bağlı
- Bağ: doğrulama anındaki User-Agent ve IP adresine bağlı
Önemli: IP veya User-Agent'tan birini değiştirmek çerezi anında geçersiz kılar. Bu yüzden çözüm bir proxy ister; çözüm ve sonraki istekler hep aynı proxy'den yapılır.
Çerez neye kilitlenir?
- IP adresi — çözüm, kullanacağınız IP ile aynı IP'den gelmelidir
- User-Agent — çözümdeki User-Agent isteklerinizle eşleşmelidir
- TLS test profil yapılandırması — bazı yapılandırmalar TLS özelliklerini de denetler
CaptchaAI ile doğrulama akışını çözme
CaptchaAI, doğrulama akışını cloudflare_challenge yöntemiyle çözer; çerez IP'ye bağlı olduğu için istekte proxy zorunludur.
Python
import requests
import time
API_KEY = "YOUR_API_KEY"
# Submit task — proxy is REQUIRED
response = requests.get("https://ocr.captchaai.com/in.php", params={
"key": API_KEY,
"method": "cloudflare_challenge",
"pageurl": "https://example.com/protected-page",
"proxy": "username:password@proxy.example.com:8080",
"proxytype": "HTTP",
"json": 1
})
task_id = response.json()["request"]
# Poll for result
for _ in range(60):
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.get("status") == 1:
solution = result["request"]
# solution contains qa_session_cookie cookie + user_agent
print(f"qa_session_cookie: {solution}")
break
Node.js
const axios = require('axios');
async function solveCloudflareChallenge(pageurl, proxy) {
const { data } = await axios.get('https://ocr.captchaai.com/in.php', {
params: {
key: 'YOUR_API_KEY',
method: 'cloudflare_challenge',
pageurl,
proxy,
proxytype: 'HTTP',
json: 1
}
});
const taskId = data.request;
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: 'YOUR_API_KEY', action: 'get', id: taskId, json: 1 }
});
if (res.data.status === 1) return res.data.request;
}
throw new Error('Timeout');
}
Dönen çerezi kullanma
# After getting the solution
qa_session_cookie = solution["qa_session_cookie"]
user_agent = solution["user_agent"]
# Use the SAME proxy and user agent for subsequent requests
session = requests.Session()
session.cookies.set("qa_session_cookie", qa_session_cookie, domain=".example.com")
session.headers["User-Agent"] = user_agent
session.proxies = {"https": "http://username:password@proxy.example.com:8080"}
# Now access the protected page
page = session.get("https://example.com/protected-page")
print(f"Status: {page.status_code}")
Örnek senaryo: e-ticaret akışının QA testi
Cloudflare arkasındaki bir e-ticaret satın alma akışını test ettiğinizi düşünün. Gece çalışan smoke testleriniz veri merkezi IP'lerinden çıktığı için doğrulama akışına takılıp 403 ile düşer. Çözüm; akışı CaptchaAI ile çözüp dönen qa_session_cookie çerezini sabit bir proxy üzerinden test istemcinize taşımaktır. USD ve thread bazlı fiyatlandırma, TL oynaklığından bağımsız öngörülebilir bir maliyet sağlar. Yalnızca yetkiniz olan sistemleri test edin; toplanan kişisel veriler KVKK kapsamına girer.
Paralel QA worker'ları için thread sayısı belirleyicidir: her eşzamanlı çözüm bir thread tutar, çözüm bitince thread serbest kalır. Onlarca akışı aynı anda test eden ekipler daha yüksek thread'li planlara geçerek gece test pencerelerini kısaltır.
Sık sorulan sorular
CaptchaAI hangi Cloudflare doğrulama tiplerini çözer?
CaptchaAI iki Cloudflare tipini de çözer:
- Cloudflare doğrulama akışı (
cloudflare_challenge) — çerez + oturum döndürür - Cloudflare Turnstile (
turnstile) — bir token döndürür
Doğrulama akışı çözümü hangi CaptchaAI planına dahil?
Ayrı bir "Cloudflare paketi" yoktur; tüm planlar thread bazlıdır ve sınırsız çözüm içerir:
- BASIC ($15/ay, 5 thread) — düşük hacimli QA testleri
- ADVANCE ($90/ay, 50 thread) — çok sayıda paralel akış
Ham bir HTTP istemcisiyle doğrulama akışını çözebilir miyim?
Hayır. Akış, JavaScript çalıştıran gerçek bir tarayıcı ortamı ister; ham requests veya axios çağrıları doğrulama sayfasında takılır. Çözümü CaptchaAI'ye devredip dönen çerezi HTTP istemcinize taşırsınız.
qa_session_cookie'yi farklı bir IP ile kullanabilir miyim?
Hayır. Çerez şu ikisine bağlıdır ve biri değişirse yeni bir çözüm gerekir:
- doğrulama anındaki IP adresi
- doğrulama anındaki User-Agent