CaptchaAI'ye Turnstile CAPTCHA'sı gönderdiniz, jetonu geri aldınız ancak hedef site bunu reddediyor. Token teknik olarak çözüldü; sorun onu nasıl ve ne zaman kullandığınızdır. Bu kılavuz, Turnstile jetonlarının çözüldükten sonra başarısız olmasının tüm nedenlerini kapsar.
Belirtiler
| Ne görüyorsun | Muhtemel sebep |
|---|---|
| Site, belirteci gönderdikten sonra 403 değerini döndürüyor | Tokenın süresi gönderilmeden önce doldu |
| Form gönderimi sessizce başarısız oluyor | Belirteç ekleme için yanlış alan adı |
| Jeton kabul edildi ancak işlem engellendi | Site anahtarı uyuşmazlığı — yanlış widget çözüldü |
| Bir kez çalışır, sonra başarısız olur | Jeton zaten kullanılmış (tek kullanımlık) |
| Tarayıcıda çalışıyor, komut dosyasında başarısız oluyor | Eksik çerezler veya başlıklar |
Neden 1: Belirtecin süresi doldu
Turnstile jetonlarının süresi hızlı bir şekilde dolar - genellikle 300 saniye (5 dakika) içinde. Kodunuzun jetonu alıp göndermesi arasında çok uzun zaman geçerse jeton ölmüş demektir.
Düzeltme: Jetonu aldıktan hemen sonra gönderin.
import requests
import time
API_KEY = "YOUR_API_KEY"
# Submit Turnstile task
submit = requests.post("https://ocr.captchaai.com/in.php", data={
"key": API_KEY,
"method": "turnstile",
"sitekey": "0x4AAAAAAADnPIDROz1234",
"pageurl": "https://staging.example.com/qa-login",
"json": 1
}).json()
task_id = submit["request"]
time.sleep(10)
# Poll for result
for _ in range(24):
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:
token = result["request"]
# USE TOKEN IMMEDIATELY — do not delay
response = requests.post("https://staging.example.com/qa-login", data={
"username": "user",
"password": "pass",
"cf-turnstile-response": token
})
break
time.sleep(5)
Neden 2: Yanlış site anahtarı
Her Turnstile widget'ının benzersiz bir site anahtarı vardır. Sayfada birden fazla widget varsa veya yanlış anahtarı kopyaladıysanız jeton geçerli olur ancak reddedilir.
Doğru site anahtarı nasıl bulunur:
// In browser console on the target page
document.querySelectorAll('[data-sitekey]').forEach(el => {
console.log('Sitekey:', el.getAttribute('data-sitekey'));
console.log('Element:', el);
});
Birden fazla site anahtarı varsa gönderdiğiniz forma eklenmiş olanı kullanın.
Neden 3: Yanlış alan adı
Turnstile, jetonun g-recaptcha-response değil cf-turnstile-response cinsinden olmasını bekliyor.
# WRONG — this is for reCAPTCHA
data = {"g-recaptcha-response": token}
# CORRECT — this is for Turnstile
data = {"cf-turnstile-response": token}
Bazı siteler özel bir alan adı kullanır. Gerçek alanı bulmak için formu inceleyin:
// Check what field the Turnstile widget populates
document.querySelector('[name*="turnstile"], [name*="cf-"]')
Neden 4: Belirteç zaten kullanılmış
Turnstile jetonları tek kullanımlıktır. Kodunuz aynı belirteçle bir isteği yeniden denerse ikinci deneme başarısız olur.
Düzeltme: Her gönderim denemesi için yeni bir CAPTCHA çözün.
Neden 5: Eksik çerezler veya oturum içeriği
Cloudflare, belirteci oturum çerezlerine göre doğrulayabilir. CAPTCHA'yı bir oturumda çözüp başka bir oturumda gönderirseniz reddedilme olasılığı yüksektir.
# Use the SAME session for page load and token submission
session = requests.Session()
# Load the page first to establish cookies
session.get("https://staging.example.com/qa-login")
# Then solve and submit using the same session
token = solve_turnstile(sitekey, pageurl)
session.post("https://staging.example.com/qa-login", data={
"cf-turnstile-response": token
})
Neden 6: Eylem veya cData uyuşmazlığı
Bazı Turnstile uygulamaları, tokene bağlı action veya cData parametrelerini içerir. Eğer site bunları bekliyorsa çözerken bunları geçmelisiniz.
submit = requests.post("https://ocr.captchaai.com/in.php", data={
"key": API_KEY,
"method": "turnstile",
"sitekey": "0x4AAAAAAADnPIDROz1234",
"pageurl": "https://staging.example.com/qa-login",
"action": "login", # If required by the site
"data": "custom_cdata_value", # If required by the site
"json": 1
}).json()
Karar ağacı
Token solved but rejected
↓
Used within 5 minutes? → No → Solve again, submit immediately
↓ Yes
Correct sitekey? → No → Find the correct sitekey from the page
↓ Yes
Using cf-turnstile-response field? → No → Change field name
↓ Yes
Same session for page load + submit? → No → Use session persistence
↓ Yes
Token used only once? → No → Solve a new token per submission
↓ Yes
Site requires action/cData? → Check page source, add to API call
SSS
Turnstile jetonlarının geçerliliği ne kadardır?
Tipik olarak 300 saniye (5 dakika). Bazı uygulamalar daha kısa süre sonu belirler. Tokenı aldıktan sonra birkaç saniye içinde gönderin.
Turnstile Cloudflare doğrulama akışı ile aynı mıdır?
Hayır. Turnstile gömülü bir widget'tır (reCAPTCHA gibi). Cloudflare doğrulama akışı tam sayfa bir geçiş reklamıdır. Farklı CaptchaAI yöntemleri kullanırlar: turnstile ve cloudflare_challenge.
Simgem neden Postman'da çalışıyor ama senaryomda çalışmıyor?
Postacı farklı başlıklar veya tanımlama bilgileri gönderiyor olabilir. Komut dosyanızın başlıklarını ve oturum durumunu tarayıcının gönderdiği bilgilerle eşleştirin.
CaptchaAI'de Turnstile CAPTCHA'larını çözün
Güvenilir Turnstile çözümünü şu adreste edinin:captchaai.com.