Cloudflare doğrulamasını CaptchaAI ile çözüp qa_session_cookie çerezini oturumunuza eklediğiniz halde doğrulama sayfası ısrarla geri geliyorsa sorun neredeyse her zaman aynıdır: çerez, onu üreten bağlamla artık eşleşmiyor. Cloudflare bu çerezi çözüm anındaki IP'ye, User-Agent'a ve alan adına bağlar; bu üçlüden biri bile kaydığında çerezi geçersiz sayar ve doğrulamayı yeniden gösterir. Aşağıda döngüyü tetikleyen beş nedeni ve her biri için net düzeltmeyi, Türkiye'deki e-ticaret QA ekiplerinin en sık karşılaştığı sırayla bulacaksınız.
qa_session_cookie çerezi neye bağlıdır?
CaptchaAI bir Cloudflare doğrulama akışı'nı çözdüğünde size bir qa_session_cookie çerezi döndürür. Bu çerez tek başına taşınabilir bir bilet değildir; çözüm anındaki üç değişkene kilitlenir:
- Çözümde kullanılan proxy IP'si
- Çözümde kullanılan User-Agent
- Hedef sitenin alan adı
Çerezi kullandığınız isteğin bu üç değerin tamamıyla uyuşması gerekir. Biri bile farklıysa Cloudflare çerezi reddeder ve doğrulama sayfasını tekrar basar. Döngüyü kırmanın tek yolu, çözümden sonraki her isteğin aynı bağlamı taşımasını sağlamaktır.
Bir bakışta: hangi neden hangi belirtiyi verir?
Aşağıdaki tablo, gözlemlenen belirtiye göre doğru nedene hızlıca gitmenizi sağlar. Nedenler pratikte görülme sıklığına göre sıralanmıştır; ilk ikisi vakaların büyük çoğunluğunu kapsar.
| Neden | Tipik belirti | Düzeltme |
|---|---|---|
| User-Agent uyumsuzluğu | Çözüm başarılı ama ilk istekte doğrulama geri geliyor | Aynı User-Agent'ı her iki adımda kullanın |
| Proxy IP farkı | Çerez yazıldı ama site yine engelliyor | Aynı çıkış IP'sini koruyun |
| Yanlış çerez alanı | Çerez isteğe hiç eklenmiyor | Alan adına nokta ön eki ekleyin |
| Çerez süresi doldu | Döngü bir süre sonra başlıyor | TTL'i takip edip yeniden çözün |
| TLS uyumsuzluğu | Her şey doğru ama istek reddediliyor | curl_cffi veya tls-client kullanın |
Neden 1: Gönderdiğiniz User-Agent isteklerinizle eşleşmiyor
En sık görülen neden budur. CaptchaAI'ye çözüm için gönderdiğiniz User-Agent ile daha sonra siteye giderken kullandığınız User-Agent'ın karakteri karakterine aynı olması gerekir. Tek bir Chrome sürüm numarası farkı bile çerezi geçersiz kılar.
Belirti:
- Çözüm isteği başarılı dönüyor ama ilk
session.getçağrısı doğrulama HTML'ini getiriyor. - Aynı akış tarayıcıda çalışıyor, kodda çalışmıyor.
import requests
USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
# Step 1: Solve with the SAME User-Agent
solve_data = {
"key": "YOUR_API_KEY",
"method": "cloudflare_challenge",
"pageurl": "https://example.com",
"proxy": "host:port:user:pass",
"proxytype": "HTTP",
"userAgent": USER_AGENT, # Must match step 2
"json": 1
}
submit = requests.post("https://ocr.captchaai.com/in.php", data=solve_data).json()
# ... poll for result ...
# Step 2: Use the SAME User-Agent in subsequent requests
session = requests.Session()
session.headers["User-Agent"] = USER_AGENT # Must match step 1
session.cookies.set("qa_session_cookie", qa_session_cookie_value, domain=".example.com")
resp = session.get("https://example.com")
User-Agent'ı tek bir sabitte tutup hem çözüm isteğine hem de oturuma oradan besleyin; değeri iki ayrı yerde elle yazmak, uyuşmazlığın en yaygın kaynağıdır.
Neden 2: Çözüm ve tarama farklı proxy IP'lerinden yapılıyor
qa_session_cookie çerezi, doğrulamayı çözen IP'ye bağlıdır. Siteye başka bir IP'den istek atarsanız çerez reddedilir ve döngü baştan başlar.
Belirti:
- Çözümü proxy üzerinden, taramayı doğrudan makinenizden yapıyorsunuz.
- Çıkış IP'niz istek başına değişiyor.
PROXY = "host:port:user:pass"
# Solve with this proxy
solve_data = {
"key": "YOUR_API_KEY",
"method": "cloudflare_challenge",
"pageurl": "https://example.com",
"proxy": PROXY,
"proxytype": "HTTP",
"userAgent": USER_AGENT,
"json": 1
}
# Use the SAME proxy for subsequent requests
session.proxies = {
"http": f"http://user:pass@host:port",
"https": f"http://user:pass@host:port"
}
Önemli: Çözüm ile tarama arasında aynı çıkış IP'sini koruyan bir oturuma sabitleyin. IP, doğrulamanın çözüldüğü an ile çereze güvenerek gezindiğiniz an arasında değişmemelidir.
Neden 3: Çerez yanlış alan adına yazılıyor
qa_session_cookie çerezi doğru alan adına ve doğru niteliklerle yazılmalıdır. En sık yapılan hata, alan adının başına nokta koymayı unutmaktır; bu, çerezin alt alan adlarını kapsamamasına yol açar.
Belirti:
- Çerez oturumda görünüyor ama isteğe hiç eklenmiyor.
www.gibi bir alt alana geçince çerez düşüyor.
# WRONG — setting on wrong domain
session.cookies.set("qa_session_cookie", value, domain="example.com")
# CORRECT — include the dot prefix for subdomain coverage
session.cookies.set("qa_session_cookie", value, domain=".example.com")
# Or set all cookies returned by CaptchaAI
for cookie_str in result.get("cookies", "").split(";"):
if "qa_session_cookie" in cookie_str:
name, val = cookie_str.strip().split("=", 1)
session.cookies.set(name.strip(), val.strip(), domain=".example.com")
CaptchaAI birden çok çerez döndürüyorsa, yalnızca birini seçmek yerine yanıtın döndürdüğü tüm çerezleri oturuma aktarmak en güvenli yaklaşımdır.
Neden 4: Çerezin süresi doldu (TTL)
qa_session_cookie çerezlerinin ömrü sınırlıdır; genellikle 15–30 dakika. Süre dolduğunda Cloudflare doğrulamayı yeniden gösterir. Uzun süren tarama işlerinde döngü bu yüzden "bir süre sonra" başlar.
Belirti:
- İlk birkaç istek sorunsuz, uzun işlerde ortada döngü başlıyor.
- Aynı kod dakikalar sonra tekrar çalıştırıldığında engelleniyor.
Düzeltme: Çerezin yaşını takip edin ve süresi dolmadan önce yeniden çözün.
import time
last_solve_time = None
COOKIE_TTL = 900 # 15 minutes
def get_qa_session_cookie():
global last_solve_time
if last_solve_time and (time.time() - last_solve_time) < COOKIE_TTL:
return # Cookie still valid
# Solve again
qa_session_cookie = solve_cloudflare_challenge()
session.cookies.set("qa_session_cookie", qa_session_cookie, domain=".example.com")
last_solve_time = time.time()
TTL'i çerezin resmi ömründen biraz kısa (örneğin 15 dakika) tutmak, sınır durumlarında yaşanan yarış koşullarını önler.
Neden 5: TLS imzası tarayıcıya benzemiyor
Cloudflare yalnızca çerezlere değil, isteğin TLS el sıkışma imzasına da bakar. Python'un requests kütüphanesi, Chrome'dan farklı bir TLS imzası üretir. Bazı siteler, geçerli bir qa_session_cookie gönderseniz bile bu imza bir tarayıcıya benzemiyorsa isteği reddeder.
Belirti:
- User-Agent, IP ve alan adı doğru ama site yine doğrulama gösteriyor.
curlya da tarayıcı çalışıyor, düzrequestsçalışmıyor.
Düzeltme: Tarayıcıya benzeyen TLS imzaları için curl_cffi veya tls-client kullanın.
pip install curl_cffi
from curl_cffi import requests as curl_requests
session = curl_requests.Session(impersonate="chrome120")
session.cookies.set("qa_session_cookie", value, domain=".example.com")
resp = session.get("https://example.com")
impersonate="chrome120" değerini gönderdiğiniz User-Agent'taki Chrome sürümüyle uyumlu tutun; ikisi arasındaki tutarsızlık da sinyal üretir.
Hızlı teşhis kontrol listesi
Döngüyü giderirken yukarıdan aşağıya ilerleyin; ilk dördü çözmeden TLS katmanına geçmeyin.
Challenge keeps repeating
↓
User-Agent in solve request matches browsing request? → No → Sync User-Agent
↓ Yes
Same proxy IP for solve and browse? → No → Pin proxy IP (sticky session)
↓ Yes
Cookie set on correct domain (.example.com)? → No → Fix domain
↓ Yes
Cookie less than 15 minutes old? → No → Re-solve the challenge
↓ Yes
TLS test profil yapılandırması matches a browser? → No → Use curl_cffi or tls-client
↓ Yes
Site may have additional bot detection → Use headless browser instead
Beş adımın tamamı yeşil olduğu halde döngü sürüyorsa, sitede çerez ötesinde ek bot algılama katmanları var demektir; bu durumda ham istek yerine headless tarayıcı ile çalışmak daha güvenilir sonuç verir.
Örnek senaryo: e-ticaret ödeme akışı QA testi
Türkiye'deki ekiplerin çoğu bu döngüyle bir ödeme adımının regresyon testini otomatikleştirirken tanışır. Diyelim ki bir e-ticaret sitesinin sepet ve ödeme akışını Europe/Istanbul saat diliminde her gece test eden bir QA işiniz var. İlk istekte doğrulama çözülüyor, ancak test 20 dakikayı aştığında (Neden 4) çerezin süresi doluyor ve akış ortasında döngüye giriyor. Çözüm, çerez yaşını takip eden yardımcı fonksiyonu test koşucusuna bağlamak ve her senaryo grubundan önce çerezi tazelemektir.
İkinci sık senaryo, testi yerel makineden çalıştırırken çözümün proxy üzerinden, taramanın ise doğrudan makinenizin IP'sinden yapılmasıdır (Neden 2). Çözüm ve tarama tek bir oturum nesnesinden, tek çıkış IP'siyle geçtiğinde döngü kaybolur. Not: Bu tür QA akışlarında topladığınız veriler kişisel veri içeriyorsa KVKK kapsamına girer; doğrulama çözme adımını yalnızca yetkili test ve veri toplama iş akışlarınızda kullanın.
Sık sorulan sorular
Doğrulamayı çözdüğüm halde site yine engelliyorsa sorun çerezde mi?
Her zaman değil. Çerez doğru IP, User-Agent ve alan adıyla yerleştirilmişse, engelleme büyük olasılıkla TLS imzasından (Neden 5) veya çerez dışı ek bir bot algılama katmanından geliyordur. Önce kontrol listesinin ilk dört adımını doğrulayın.
Aynı qa_session_cookie'yi birden fazla thread veya worker'da kullanabilir miyim?
Yalnızca hepsi aynı çıkış IP'sini ve aynı User-Agent'ı kullanıyorsa. Farklı worker'lar farklı IP'lerden çıkıyorsa her biri kendi doğrulamasını çözmeli ve kendi çerezini taşımalıdır.
Proxy sağlayıcımı değiştirdiğimde döngü neden yeniden başlıyor?
Çünkü çerez eski çıkış IP'sine bağlıdır. IP havuzunu ya da sağlayıcıyı değiştirdiğinizde mevcut çerez geçersiz olur; yeni IP ile doğrulamayı yeniden çözmeniz gerekir.
curl_cffi kurmadan bu sorunu çözebilir miyim?
Sitenin TLS imzasını denetlemediği durumlarda evet, düz requests yeterlidir. Ancak site TLS katmanında da kontrol yapıyorsa curl_cffi, tls-client veya bir headless tarayıcı pratikte tek güvenilir yoldur.
Bu doğrulama çözme iş akışı KVKK açısından uygun mudur?
CaptchaAI yalnızca CAPTCHA doğrulamasını çözer; topladığınız veriler kişisel veri içeriyorsa bunların işlenmesi KVKK'ya tabidir. İş akışını yetkili QA ve veri toplama senaryolarıyla sınırlı tutmak sizin sorumluluğunuzdadır.
Cloudflare doğrulamasını CaptchaAI ile çözün
Yinelenen doğrulama döngüsünü kırmak için BASIC planla ($15/ay, 5 thread) captchaai.com üzerinden başlayın.