Çoğu Cloudflare Turnstile hatası rastgele değildir. Bunlar üç kategoriye ayrılır: istek aşaması hataları (API'ye gönderiminiz reddedilir), sonuç aşaması hataları (yoklama başarısız olur veya zaman aşımına uğrar) ve hedef sayfa doğrulama hataları (API geçerli bir belirteç döndürür ancak sayfa onu hâlâ reddeder).
Turnstileye özgü en büyük üç sorun şunlardır:
- Tam sayfa URL'si yanlış — özellikle bağlamın daha katı olduğu Cloudflare meydan okuma sayfalarında
- Yanlış site anahtarı — yanlış öğeden veya farklı bir widget örneğinden alınmış
- Belirteç yanlış yoldan uygulandı — sayfa
cf-turnstile-response, geri arama veya her ikisini birden bekliyor
CaptchaAI Turnstileyi bir çözümle çözüyor%100 başarı oranı10 saniyenin altında. Entegrasyonunuz başarısız olduğunda sorun neredeyse her zaman gönderdiğiniz parametrelerde veya döndürülen jetonu nasıl uyguladığınızdadır.
Turnstileye özel arıza noktaları
Hata kodlarına dalmadan önce Turnstileyi diğer captcha türlerinden farklı kılan üç şeyi anlayın:
1. Tam sayfa URL'si daha önemlidir
Turnstile belirteçleri sayfa bağlamına sıkı sıkıya bağlıdır. Cloudflare sınama sayfalarında (tam sayfa doğrulama ekranı), yanlış URL'nin (biraz farklı olsa bile) kullanılması, jetonun reddedilmesine neden olacaktır.
2. İki token uygulama yolu
Döndürülen jeton iki şekilde uygulanabilir ve yanlış olanı kullanmak sessizce başarısız olur:
| Yöntem | Ne zaman kullanılmalı |
|---|---|
Gizli alan — cf-turnstile-response'ye (ve bazen g-recaptcha-response'ye) ekleyin |
Sayfa gizli girişi olan standart bir form kullandığında |
Geri arama işlevi — turnstile.render() veya data-callback'de tanımlanan işlevi çağırın |
Sayfa form yerine programatik doğrulama kullandığında |
3. Jetonlar tek kullanımlıktır
Bir Turnstile jetonu yalnızca bir kez doğrulanabilir. Otomasyonunuz yanlışlıkla iki kez gönderirse veya yarış durumu varsa ikinci deneme başarısız olur.
İstek aşaması hataları
Bunlar, görevi https://ocr.captchaai.com/in.php'ye gönderirken gerçekleşir.
ERROR_WRONG_USER_KEY
Neden: API anahtarı biçimi hatalı (32 karakter olmalıdır).
Düzeltme: Anahtarı şuradan doğrulayın:captchaai.com/api.php.
ERROR_KEY_DOES_NOT_EXIST
Neden: Anahtar doğru biçimlendirilmiş ancak etkin bir hesaba bağlı değil.
Düzeltme: Kontrol panelinizi kontrol edin. Hesabın aktif olduğundan ve anahtarın doğru olduğundan emin olun.
ERROR_ZERO_BALANCE
Neden: Planınızda ücretsiz konu yok.
Düzeltme: İş parçacıklarının serbest kalmasını, eşzamanlılığın azaltılmasını veya yükseltilmesini bekleyin.
ERROR_PAGEURL
Neden: pageurl parametresi eksik.
Düzeltme: Tam URL'yi (protokol, alan adı ve yol) ekleyin:
pageurl=https://staging.example.com/qa-login
ERROR_BAD_PARAMETERS
Neden: Gerekli parametreler eksik veya hatalı biçimlendirilmiş. Turnstile için gerekli parametreler şunlardır:
| Parametre | Tür | Gerekli | Açıklama |
|---|---|---|---|
key |
Dize | Evet | CaptchaAI API anahtarınız |
method |
Dize | Evet | turnstile olmalı |
sitekey |
Dize | Evet | Turnstile widget'ı site anahtarı |
pageurl |
Dize | Evet | Tam sayfa URL'si |
İsteğe bağlı ancak kullanışlı:
| Parametre | Tür | Açıklama |
|---|---|---|
action |
Dize | data-action değeri veya turnstile.render()'den action parametresi |
proxy |
Dize | Biçim: login:password@IP:PORT |
proxytype |
Dize | HTTP, HTTPS, SOCKS4, SOCKS5 |
Düzeltme: Gerekli tüm alanların mevcut olduğunu ve doğru şekilde yazıldığını doğrulayın.
HTML veya 500/502 yanıtları
Neden: Geçici sunucu tarafı hatası.
Düzeltme: 5-10 saniye bekleyip yeniden deneyin.
Turnstile site anahtarı nasıl bulunur?
Site anahtarı en sık yanlış parametredir. İşte onu nerede bulacağınız:
Seçenek 1 — data-sitekey özelliği:
<div class="cf-turnstile" data-sitekey="0x4AAAAAAAB1example"></div>
Seçenek 2 — turnstile.render() çağrısı:
turnstile.render('#captcha-container', {
sitekey: '0x4AAAAAAAB1example',
callback: function(token) {
document.getElementById('cf-turnstile-response').value = token;
}
});
Seçenek 3 — oluşturma çağrısına müdahale etmek (gelişmiş):
Site anahtarı dinamik olarak yüklenmişse, widget parametreleri yakalamak için başlatılmadan önce turnstile.render'yi yeniden tanımlayabilirsiniz:
// Inject this before the Turnstile script loads
const originalRender = window.turnstile.render;
window.turnstile.render = function(container, params) {
console.log('Sitekey:', params.sitekey);
console.log('Action:', params.action);
return originalRender.call(this, container, params);
};
Sonuç aşaması hataları
Bunlar https://ocr.captchaai.com/res.php yoklaması yapılırken gerçekleşir.
CAPCHA_NOT_READY
Hata değil. Çözüm hâlâ devam ediyor. CaptchaAI'deki Turnstile çözümleri genellikle 10 saniyeden kısa sürer.
Düzeltme: 5 saniye bekleyip tekrar anket yapın.
ERROR_WRONG_ID_FORMAT
Neden: Captcha kimliği sayısal olmayan karakterler içeriyor.
Düzeltme: in.php tarafından döndürülen kimliğin aynısını, değiştirilmeden kullanın.
ERROR_WRONG_CAPTCHA_ID
Neden: Kimlik, gönderilen hiçbir görevle eşleşmiyor.
Düzeltme: Gönderim yanıtından doğru kimliği yokladığınızı doğrulayın.
ERROR_EMPTY_ACTION
Neden: Anket isteğinizde action parametresi eksik.
Düzeltme: Her zaman action=get'yi ekleyin:
https://ocr.captchaai.com/res.php?key=YOUR_KEY&action=get&id=CAPTCHA_ID&json=1
Not: Turnstile için anket isteğinizde daima
json=1kullanın. JSON yanıtı, bazı Cloudflare korumalı sayfaların başarılı belirteç doğrulaması için ihtiyaç duyduğu çözücününuser_agent'sini içerebilir.
ERROR_CAPTCHA_UNSOLVABLE
Neden: Çözüm başarısız oldu; muhtemelen yanlış site anahtarı veya desteklenmeyen sayfa yapılandırması.
Düzeltme: Site anahtarını doğrulayın, isteği yenileyin ve yeniden deneyin.
ERROR_INTERNAL_SERVER_ERROR
Neden: Sunucu tarafı sorunu.
Düzeltme: 10 saniye bekleyip yeniden deneyin.
Hedef sayfa doğrulama hataları
Bunlar hata ayıklaması en zor olanlardır çünkü API başarılı bir şekilde bir belirteç döndürür, ancak hedef sayfa bunu reddeder.
Hata 1: Belirteç yanlış alana eklendi
Belirti: Form gönderiliyor ancak sayfa bir doğrulama hatası veriyor veya yenileniyor.
Turnstile sayfaları jetonu farklı alanlarda bekleyebilir:
cf-turnstile-response— birincil Turnstile gizli girişig-recaptcha-response— bazı sayfalar bunu geri dönüş olarak kullanıyor
Düzeltme: Her iki alan için de sayfanın formunu kontrol edin. Tarayıcı otomasyonunda:
# Selenium — inject into both fields for safety
driver.execute_script("""
var cfField = document.querySelector('[name="cf-turnstile-response"]');
var gField = document.querySelector('[name="g-recaptcha-response"]');
if (cfField) cfField.value = arguments[0];
if (gField) gField.value = arguments[0];
""", token)
Hata 2: Geri arama tetiklenmedi
Belirti: Belirteç alanda ancak form hâlâ gönderimi engelliyor.
Neden: Sayfa, gizli alan yerine (veya ona ek olarak) bir geri çağırma işlevi kullanıyor. Geri arama, gönder düğmesini etkinleştirme veya bir AJAX isteği gönderme gibi ek mantığı işler.
Düzeltme: Geri aramayı bulun ve arayın:
// Check data-callback attribute
const callbackName = document.querySelector('.cf-turnstile').getAttribute('data-callback');
if (callbackName && window[callbackName]) {
window[callbackName](token);
}
// Or if it was passed in turnstile.render()
// You may need to intercept the render call to capture it
Hata 3: Yanlış tam sayfa içeriği
Belirti: Doğru site anahtarına ve yeni çözüme rağmen jeton reddedildi.
Neden: API isteğinde kullanılan pageurl, sayfanın gerçek içeriğiyle eşleşmiyor. Bu özellikle aşağıdaki durumlarda yaygındır:
- Cloudflare meydan okuma sayfaları — URL, sorgu parametrelerini veya önemli yol bileşenlerini içerebilir
- Tek sayfalı uygulamalar — görünen URL, Turnstile widget'ını yükleyen URL'den farklı olabilir
Düzeltme: Turnstile widget'ının yüklendiği tam URL'yi bulmak için DevTools Ağı sekmesini kullanın. Bu URL'yi pageurl olarak kullanın.
Hata 4: Tokenın yeniden kullanımı
Belirti: İlk çözüm işe yarıyor, sonrakiler başarısız oluyor.
Neden: Turnstile jetonları tek kullanımlıktır. Cloudflare sunucusu tarafından doğrulandıktan sonra jeton geçersiz kılınır.
Düzeltme: Her form gönderimi için yeni bir çözüm talep edin. Belirteçleri önbelleğe almayın veya yeniden kullanmayın.
Hızlı hata düzeltme referansı
| Hata / Belirti | Sahne | Muhtemel sebep | Düzeltme |
|---|---|---|---|
ERROR_WRONG_USER_KEY |
Gönder | Hatalı biçimlendirilmiş API anahtarı | 32 karakterli anahtarı doğrulayın |
ERROR_KEY_DOES_NOT_EXIST |
Gönder | Geçersiz anahtar | Kontrol panelini kontrol edin |
ERROR_ZERO_BALANCE |
Gönder | Ücretsiz konu yok | Bekleyin veya planı yükseltin |
ERROR_PAGEURL |
Gönder | pageurl eksik |
Tam URL'yi ekle |
ERROR_BAD_PARAMETERS |
Gönder | Eksik site anahtarı, yöntem veya sayfa URL'si | Gerekli tüm alanları doğrulayın |
CAPCHA_NOT_READY |
Anket | Çözüm devam ediyor | 5 saniye bekleyip tekrar deneyin |
ERROR_WRONG_ID_FORMAT |
Anket | Sayısal olmayan captcha kimliği | in.php'den tam kimliği kullanın |
ERROR_WRONG_CAPTCHA_ID |
Anket | Geçersiz captcha kimliği | Gönderim kimliğini doğrulayın |
ERROR_EMPTY_ACTION |
Anket | action=get eksik |
Eylem parametresi ekle |
| Jeton sayfaya göre reddedildi | Doğrulama | Yanlış alan, geri arama tetiklenmedi, yanlış URL | Alan adını kontrol edin, geri aramayı yapın, tam sayfa URL'sini doğrulayın |
| İkinci çözüm başarısız | Doğrulama | Jeton yeniden kullanımı | Gönderim başına yeni jeton isteyin |
Python: Turnstile çözümünü tamamla
import time
import requests
API_KEY = "YOUR_CAPTCHAAI_API_KEY"
SITEKEY = "0x4AAAAAAAB1example"
PAGE_URL = "https://staging.example.com/qa-login"
SUBMIT_URL = "https://ocr.captchaai.com/in.php"
RESULT_URL = "https://ocr.captchaai.com/res.php"
def solve_turnstile(api_key, sitekey, pageurl):
"""Submit a Turnstile challenge and return the solved token."""
# Submit
submit_resp = requests.post(
SUBMIT_URL,
data={
"key": api_key,
"method": "turnstile",
"sitekey": sitekey,
"pageurl": pageurl,
"json": 1,
},
timeout=30,
)
submit_resp.raise_for_status()
submit_data = submit_resp.json()
if submit_data.get("status") != 1:
raise RuntimeError(f"Submit failed: {submit_data}")
captcha_id = submit_data["request"]
print(f"Task created — captcha ID: {captcha_id}")
# Wait before first poll (Turnstile is fast — 10 seconds is usually enough)
time.sleep(10)
# Poll for result
for _ in range(60):
result_resp = requests.get(
RESULT_URL,
params={
"key": api_key,
"action": "get",
"id": captcha_id,
"json": 1,
},
timeout=30,
)
result_resp.raise_for_status()
result_data = result_resp.json()
if result_data.get("request") == "CAPCHA_NOT_READY":
time.sleep(5)
continue
if result_data.get("status") == 1:
return result_data["request"]
raise RuntimeError(f"Polling error: {result_data}")
raise TimeoutError("Turnstile solve timed out")
# Usage
token = solve_turnstile(API_KEY, SITEKEY, PAGE_URL)
print(f"Solved token: {token[:80]}...")
# Inject into cf-turnstile-response and/or g-recaptcha-response
# Then submit the form
Node.js: Turnstile çözümünü tamamlayın
const API_KEY = "YOUR_CAPTCHAAI_API_KEY";
const SITEKEY = "0x4AAAAAAAB1example";
const PAGE_URL = "https://staging.example.com/qa-login";
const SUBMIT_URL = "https://ocr.captchaai.com/in.php";
const RESULT_URL = "https://ocr.captchaai.com/res.php";
function sleep(ms) {
return new Promise((resolve) => setTimeout(resolve, ms));
}
async function solveTurnstile(apiKey, sitekey, pageurl) {
// Submit
const submitResp = await fetch(SUBMIT_URL, {
method: "POST",
headers: { "Content-Type": "application/x-www-form-urlencoded" },
body: new URLSearchParams({
key: apiKey,
method: "turnstile",
sitekey: sitekey,
pageurl: pageurl,
json: "1",
}),
});
const submitData = await submitResp.json();
if (submitData.status !== 1) {
throw new Error(`Submit failed: ${JSON.stringify(submitData)}`);
}
const captchaId = submitData.request;
console.log(`Task created — captcha ID: ${captchaId}`);
// Turnstile is fast — wait 10 seconds before first poll
await sleep(10_000);
// Poll for result
for (let i = 0; i < 60; i++) {
const resultResp = await fetch(
`${RESULT_URL}?${new URLSearchParams({
key: apiKey,
action: "get",
id: captchaId,
json: "1",
})}`
);
const resultData = await resultResp.json();
if (resultData.request === "CAPCHA_NOT_READY") {
await sleep(5_000);
continue;
}
if (resultData.status === 1) {
return resultData.request;
}
throw new Error(`Polling error: ${JSON.stringify(resultData)}`);
}
throw new Error("Turnstile solve timed out");
}
// Usage
solveTurnstile(API_KEY, SITEKEY, PAGE_URL)
.then((token) => {
console.log(`Solved token: ${token.slice(0, 80)}...`);
// Inject into cf-turnstile-response and/or g-recaptcha-response
})
.catch(console.error);
Turnstile vs Cloudflare doğrulama akışı: hangisiyle karşı karşıyasınız?
| Sinyal | Turnstile | Cloudflare doğrulama akışı |
|---|---|---|
| Gördüğünüz şey | Sayfaya yerleşik widget (onay kutusu veya görünmez) | Tam sayfa Cloudflare doğrulama ekranı |
| CaptchaAI'nin döndürdüğü şey | Forma enjekte edilecek bir belirteç | Bir qa_session_cookie çerezi |
| API yöntemi | turnstile |
cloudflare_challenge |
| Vekil gerekli mi? | İsteğe bağlı | Evet (gerekli) |
Tam sayfa bir Cloudflare mücadelesine katılıyorsanız (gömülü bir widget değil), aşağıdakilere ihtiyacınız vardır:Cloudflare doğrulama akışı Çözücübunun yerine bir qa_session_cookie çerezi döndürür ve bir proxy gerektirir.
SSS
İstek doğru görünse bile Turnstile neden başarısız oluyor?
En yaygın üç neden: (1) pageurl biraz yanlıştır - özellikle Cloudflare meydan okuma sayfalarında, (2) site anahtarının yanlış öğeden yakalanmış olması veya (3) belirtecin yanlış alana veya geri arama yoluna enjekte edilmesi.
En sık yapılan Turnstile hatası nedir?
Yanlış tam sayfa URL'sini kullanmak. Turnstile belirteçleri sayfa bağlamına sıkı sıkıya bağlıdır; farklı bir yol veya eksik sorgu parametresi bile reddedilmeye neden olabilir.
CAPCHA_NOT_READY ne anlama geliyor?
Çözüm halen devam ediyor. 5 saniye bekleyin ve tekrar anket yapın. Turnstile çözümleri genellikle 10 saniyenin altında tamamlanır.
API bir belirteç döndürdüğü halde sayfa onu hâlâ reddediyorsa ne yapmalıyım?
pageurl'nin widget'in yüklendiği sayfayla tam olarak eşleştiğini doğrulayın.- Sayfanın belirteci
cf-turnstile-response,g-recaptcha-responseveya her ikisinde de bekleyip beklemediğini kontrol edin. - Sayfanın gizli alan yerine (veya buna ek olarak) geri arama işlevi kullanıp kullanmadığını kontrol edin.
- Jetonların yalnızca bir kez kullanıldığından emin olun - Turnstile jetonları tek kullanımlıktır.
CaptchaAI Turnstile için proxy'leri destekliyor mu?
Evet. İsteğinize proxy ve proxytype'yi ekleyin. Bağımsız Turnstile widget'ları için proxy'ler isteğe bağlıdır ancak Cloudflare mücadele sayfalarında önerilir.
Turnstile ve Cloudflare doğrulama akışı arasındaki fark nedir?
Turnstile, jeton döndüren gömülü bir widget'tır. Cloudflare doğrulama akışı, qa_session_cookie çerezini döndüren tam sayfa bir doğrulamadır. Her ikisi de Cloudflare ürünü olmasına rağmen farklı API yöntemleri ve farklı entegrasyon modelleri kullanıyorlar.
Turnstile iş akışınızı düzeltin
Turnstile entegrasyonunuz başarısız oluyorsa:
- Site anahtarını doğrulayın —
data-sitekeyveyaturnstile.render()'den çıkarın - Sayfa URL'sini doğrulayın — Protokol ve yol da dahil olmak üzere tam URL'yi kullanın
- Belirteç yolunu kontrol edin — Sayfada
cf-turnstile-response,g-recaptcha-responseveya geri arama kullanılıyor mu? json=1kullanın — Turnstile sonuçlarını yoklarken daima JSON yanıtlarını kullanın- Belirteçleri yeniden kullanmayın — Her gönderim için yeni bir çözüm isteyin
Şununla başla:CaptchaAI Turnstile çözücü, parametrelerinizi şuna göre doğrulayın:API belgelerive okuCloudflare Turnstile Nasıl Çalışır?Widget mekaniği hakkında arka plana ihtiyacınız varsa.
Yineleme günlüğü
| Yineleme | Odaklanma | Değişiklikler |
|---|---|---|
| Taslak 1 | Yapı ve içerik | İlk sorun giderme taslağı — 3 hata aşaması, hata düzeltme tablosu, SSS |
| Taslak 2 | Teknik doğruluk | Captchaai.com/api-docs.'ye göre doğrulanmış hata kodları, Turnstile parametreleri ve jeton yolları. Parametre tabloları eklendi. method=turnstile ve cf-turnstile-response / g-recaptcha-response alanlarının her ikisi de doğrulandı. |
| Taslak 3 | Kod ve enjeksiyon derinliği | Python ve Node.js çözüm örnekleri eklendi. Site anahtarı çıkarma yöntemleri eklendi (3 yaklaşım). Her iki jeton alanına da Selenyum enjeksiyon kodu eklendi. Geri arama algılama kodu eklendi. |
| Taslak 4 | Farklılaşma içeriği | Turnstile ve Cloudflare doğrulama akışı karşılaştırma tablosu eklendi. user_agent için json=1 gereksinim notu eklendi. Dinamik site anahtarları için görüntü yakalama tekniği eklendi. |
| Taslak 5 | Nihai QA cilası | Tüm hata kodlarının resmi belgelerle eşleştiği doğrulandı. Hızlı başvuru tablosu eklendi. Giriş kısmı sıkılaştırıldı. Tek kullanımlık jeton uyarısı eklendi. Küme makalelerine doğrulanmış çapraz bağlantılar. SSS yanıtları şemaya hazırdır. |
Görsel varlık özeti
Kahraman resmi
- Alternatif metin: Geliştiricinin Cloudflare Turnstile hatalarını gidermesi — istek akışı, belirteç ekleme ve doğrulama hataları
- Gösterilmelidir: Hata aşamaları ve düzeltme yolları ile teknik sorun giderme akışı
- Dosya adı: cloudflare-Turnstile-hatalar-sorun giderme-hero.png
Yazı içi görsel 1
- Yerleşim: "Sonuç aşaması hataları"ndan sonra
- Tür: Karar ağacı
- Alternatif metin: Cloudflare Turnstile hataları için karar ağacı — istek hataları, yoklama hataları ve sayfa reddi karşılaştırması
- Dosya adı: cloudflare-Turnstile-hata-karar-ağacı.png
Yazı içi görsel 2
- Yerleşim: "Hedef sayfa doğrulama hataları"ndan sonra
- Tür: Nedenler ve düzeltmeler şeması
- Alternatif metin: Turnstile jetonlarının neden reddedildiğini ve her nedene yönelik düzeltmeyi gösteren diyagram
- Dosya adı: cloudflare-Turnstile-validation-causes-fixes.png