Sorun Giderme

Cloudflare Turnstile Hataları ve Sorun Giderme

Ç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:

  1. Tam sayfa URL'si yanlış — özellikle bağlamın daha katı olduğu Cloudflare meydan okuma sayfalarında
  2. Yanlış site anahtarı — yanlış öğeden veya farklı bir widget örneğinden alınmış
  3. 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 alancf-turnstile-response'ye (ve bazen g-recaptcha-response'ye) ekleyin Sayfa gizli girişi olan standart bir form kullandığında
Geri arama işleviturnstile.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=1 kullanın. JSON yanıtı, bazı Cloudflare korumalı sayfaların başarılı belirteç doğrulaması için ihtiyaç duyduğu çözücünün user_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şi
  • g-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?

  1. pageurl'nin widget'in yüklendiği sayfayla tam olarak eşleştiğini doğrulayın.
  2. Sayfanın belirteci cf-turnstile-response, g-recaptcha-response veya her ikisinde de bekleyip beklemediğini kontrol edin.
  3. Sayfanın gizli alan yerine (veya buna ek olarak) geri arama işlevi kullanıp kullanmadığını kontrol edin.
  4. 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:

  1. Site anahtarını doğrulayındata-sitekey veya turnstile.render()'den çıkarın
  2. Sayfa URL'sini doğrulayın — Protokol ve yol da dahil olmak üzere tam URL'yi kullanın
  3. Belirteç yolunu kontrol edin — Sayfada cf-turnstile-response, g-recaptcha-response veya geri arama kullanılıyor mu?
  4. json=1 kullanın — Turnstile sonuçlarını yoklarken daima JSON yanıtlarını kullanın
  5. 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

İlgili Makaleler

Bu makale için yorumlar devre dışı bırakılmıştır.