API Tutorials

API ile Cloudflare Turnstile Nasıl Çözülür

Turnstile'ı API ile çözmek üç adıma iner: sayfadan sitekey'i çıkarın, CaptchaAI'a bir görev gönderin, dönen token'ı formdaki cf-turnstile-response alanına yazın. Bu kılavuz her adımı Python ve Node.js örnekleriyle gösterir, sonunda kopyalayıp çalıştırabileceğiniz tam bir betik verir.

Cloudflare Turnstile, arka planda sessizce çalışan, gizliliğe odaklı bir CAPTCHA alternatifidir. Klasik CAPTCHA'ların aksine kullanıcıya nadiren görünür bir adım gösterir; bunun yerine tarayıcı sinyallerini toplayıp bir token üretir ve sitenin arka ucu bu token'ı doğrular. Sizin otomasyonunuzun görevi, geçerli bir token elde edip onu isteğe eklemektir.

Genel API akışını (görev gönder → sonucu sorgula → token'ı kullan) daha önce görmediyseniz, önce 4 adımlı Hızlı Başlangıç rehberini okumanız buradaki adımları tanıdık kılar.


Başlamadan önce gerekenler

Öğe Değer
CaptchaAI API anahtarı captchaai.com panelinden
Turnstile sitekey Hedef sayfadan çıkarılır (0x ile başlar)
Sayfa URL'si Turnstile'ın göründüğü tam URL
Dil Python 3.7+ veya Node.js 14+

Turnstile, CaptchaAI'ın genel kullanıma açık (method=turnstile) çözüm tiplerinden biridir ve panelde tanımlı thread sayınız dahilinde ek bir ücret olmadan çözülür.


Adım 1: Turnstile sitekey'i bulun

Sitekey genellikle sayfa HTML'inde, bir div veya script etiketinin içindedir:

<div class="cf-turnstile" data-sitekey="0x4AAAAAAAC3DHQFLr1GavNl"></div>

Veya JavaScript tarafından çizilir:

turnstile.render('#widget', {
  sitekey: '0x4AAAAAAAC3DHQFLr1GavNl',
  callback: function(token) { /* ... */ }
});

Üç çıkarım yöntemi:

  1. Tarayıcı DevTools — Elements sekmesinde data-sitekey veya cf-turnstile arayın.
  2. Kaynak kodCtrl+U ile sayfa kaynağını açıp 0x ile başlayan dizeleri arayın.
  3. Network sekmesichallenges.cloudflare.com filtresi koyun; sitekey istek parametrelerinde geçer.

Turnstile sitekey'i her zaman 0x ile başlar ve genellikle 22 karakter uzunluğundadır. Bu, 6L ile başlayan reCAPTCHA anahtarlarından temel farkıdır.


Adım 2: Görevi gönderin

https://ocr.captchaai.com/in.php adresine method=turnstile ile POST atın.

Python

import requests

API_KEY = "YOUR_CAPTCHAAI_KEY"
SITEKEY = "0x4AAAAAAAC3DHQFLr1GavNl"
PAGEURL = "https://staging.example.com/qa-login"

r = requests.post("https://ocr.captchaai.com/in.php", data={
    "key": API_KEY,
    "method": "turnstile",
    "sitekey": SITEKEY,
    "pageurl": PAGEURL,
    "json": 1,
})
data = r.json()
if data["status"] != 1:
    raise RuntimeError(f"submit failed: {data}")
task_id = data["request"]
print("task id:", task_id)

Node.js

Aynı isteğin Node.js karşılığı:

const axios = require("axios");

const { data } = await axios.post("https://ocr.captchaai.com/in.php", null, {
  params: {
    key: process.env.CAPTCHAAI_KEY,
    method: "turnstile",
    sitekey: "0x4AAAAAAAC3DHQFLr1GavNl",
    pageurl: "https://staging.example.com/qa-login",
    json: 1,
  },
});
if (data.status !== 1) throw new Error(`submit failed: ${JSON.stringify(data)}`);
const taskId = data.request;

Başarılı yanıt {"status": 1, "request": "<task_id>"} biçimindedir. Sorgulama adımı için task_id'yi saklayın. Bir e-ticaret QA senaryosunda, pageurl olarak canlı mağazanızı değil staging.example.com/qa-login gibi bir hazırlık ortamı adresini kullanın; sitekey ve pageurl birebir eşleşmediğinde arka uç token'ı reddeder.


Adım 3: Sonucu sorgulayın

CaptchaAI, Turnstile'ı genellikle 10 saniyenin altında çözer; yine de kuyruk ve ağ gecikmesi için önce 10 saniye bekleyip ardından her 5 saniyede bir, en fazla 40 kez sorgulamak güvenli bir yaklaşımdır:

import time

time.sleep(10)
for _ in range(40):
    r = requests.get("https://ocr.captchaai.com/res.php", params={
        "key": API_KEY,
        "action": "get",
        "id": task_id,
        "json": 1,
    })
    res = r.json()
    if res["status"] == 1:
        token = res["request"]
        break
    if res["request"] != "CAPCHA_NOT_READY":
        raise RuntimeError(f"solver error: {res}")
    time.sleep(5)
else:
    raise TimeoutError("turnstile solving timed out")

print("token (ilk 60 karakter):", token[:60])

CAPCHA_NOT_READY yanıtı hata değildir; çözüm henüz hazır değil demektir, döngü devam eder. Dönen token genellikle 0. ile başlayan, 400–600 karakter uzunluğunda bir Base64 dizesidir.


Adım 4: Token'ı sayfaya enjekte edin

Token elinize geçtikten sonra, Turnstile formundaki gizli cf-turnstile-response alanına yazın ve formu gönderin.

Selenium:

driver.execute_script(
    "document.querySelector('[name=cf-turnstile-response]').value = arguments[0];",
    token,
)
driver.find_element("css selector", "form").submit()

Playwright:

page.evaluate(
    "(t) => document.querySelector('[name=cf-turnstile-response]').value = t",
    token,
)
page.click("button[type=submit]")

Saf HTTP: cf-turnstile-response=<token> alanını application/x-www-form-urlencoded gövdesine ekleyin.

Turnstile token'ının ömrü yaklaşık 120–300 saniyedir. Aldıktan hemen sonra kullanın, aksi halde arka uç timeout-or-duplicate hatası döner.


Uçtan uca çalışan Python örneği

Aşağıdaki fonksiyon üç adımı tek yerde toplar — gönderme, sorgulama ve zaman aşımı yönetimi:

import os, time, requests

API = "https://ocr.captchaai.com"
KEY = os.environ["CAPTCHAAI_KEY"]

def solve_turnstile(sitekey: str, pageurl: str) -> str:
    r = requests.post(f"{API}/in.php", data={
        "key": KEY, "method": "turnstile",
        "sitekey": sitekey, "pageurl": pageurl, "json": 1,
    }, timeout=30)
    j = r.json()
    if j["status"] != 1:
        raise RuntimeError(f"submit: {j}")
    tid = j["request"]

    time.sleep(10)
    for _ in range(40):
        r = requests.get(f"{API}/res.php", params={
            "key": KEY, "action": "get", "id": tid, "json": 1,
        }, timeout=30)
        j = r.json()
        if j["status"] == 1:
            return j["request"]
        if j["request"] != "CAPCHA_NOT_READY":
            raise RuntimeError(f"poll: {j}")
        time.sleep(5)
    raise TimeoutError("timeout")

if __name__ == "__main__":
    print(solve_turnstile("0x4AAAAAAAC3DHQFLr1GavNl", "https://staging.example.com/qa-login"))

API anahtarınızı koda gömmek yerine CAPTCHAAI_KEY ortam değişkeninden okuyun; bu, anahtarın yanlışlıkla sürüm kontrolüne düşmesini önler.


Sık karşılaşılan hatalar

Kod Anlamı Yapılacak
ERROR_WRONG_USER_KEY Geçersiz API anahtarı biçimi CAPTCHAAI_KEY'in tam kopyalandığından emin olun
ERROR_KEY_DOES_NOT_EXIST Anahtar bulunamadı Panelden anahtarı yeniden kopyalayın
ERROR_ZERO_BALANCE Sıfır bakiye Hesabınıza yükleme yapıp tekrar deneyin
ERROR_PAGEURL pageurl parametresi eksik https:// dahil tam URL'yi gönderin
ERROR_CAPTCHA_UNSOLVABLE Çözüm başarısız sitekey ve pageurl'in eşleştiğinden emin olun, bir kez daha deneyin

Tüm hata kodlarının açıklaması için reCAPTCHA v2 API rehberindeki hata tablosuna bakın; kodlar iki çözüm tipinde de aynıdır.


Çözüm dönmediğinde nereye bakmalı

  1. Dinamik sitekey. Bazı Cloudflare sitelerinde sitekey her ziyarette değişir; her görev öncesinde sayfayı yeniden çekip anahtarı taze okuyun.
  2. Tam pageurl. Turnstile arka ucu URL'yi sıkı kontrol eder; query string olmadan tam yolu gönderin.
  3. TLS test profil yapılandırması. Cloudflare istemciyi TLS imzasına göre reddedebilir. curl_cffi, Playwright veya gerçek bir tarayıcı kullanın.
  4. Süresi dolmuş token. 2 dakika içinde kullanın, yoksa yeniden çözmeniz gerekir.
  5. Proxy yapılandırması. Düşük kaliteli veri merkezi IP'leri ek doğrulama adımlarını tetikleyebilir; kararlı bir proxy yapılandırması veya kendi sunucu altyapınız daha tutarlı sonuç verir.

Sık sorulan sorular

Turnstile'ı çözmek için hangi CaptchaAI planı yeterli?

Tüm planlar Turnstile'ı çözer; fark eşzamanlı thread sayısındadır. Tek betikli, sıralı bir iş akışı için BASIC ($15/ay, 5 thread) yeterlidir. QA sırasında paralel çok sayıda istek atıyorsanız ADVANCE ($90/ay, 50 thread) gibi daha yüksek thread'li bir plan gecikmeyi düşürür. Fiyatlar USD'dir ve thread başına çözüm sınırsızdır.

cf-turnstile-response alanını sayfada bulamıyorsam ne yapmalıyım?

Turnstile bu gizli alanı çoğu zaman JavaScript ile widget yüklendiğinde ekler. Alanı statik HTML'de göremiyorsanız, token'ı Adım 4'teki gibi document.querySelector ile enjekte edin; alan yoksa formu göndermeden önce siz oluşturabilirsiniz.

Sitekey her ziyarette değişiyorsa otomasyonum nasıl kararlı kalır?

Sitekey'i sabit bir değer olarak saklamayın. Her görev döngüsünün başında sayfayı çekip 0x ile başlayan güncel değeri ayrıştırın, sonra o değerle görev gönderin. Böylece Cloudflare anahtarı döndürse bile akışınız bozulmaz.

CaptchaAI hangi Cloudflare ürünlerini çözer, hCaptcha destekleniyor mu?

CaptchaAI hem Cloudflare Turnstile hem de Cloudflare Challenge (tam sayfa "tarayıcınız kontrol ediliyor" akışı) tiplerini çözer. hCaptcha ise henüz desteklenmiyor; hCaptcha kullanan bir sayfa için bu yöntem uygun değildir.

Token'ı aldıktan sonra ne kadar sürede kullanmalıyım?

Turnstile token'larının ömrü kısadır (yaklaşık 120–300 saniye). Token'ı aldıktan hemen sonra hedef isteğe ekleyin; beklerseniz arka uç timeout-or-duplicate döndürür ve yeniden çözmeniz gerekir.


Sıradaki adımlar

Ücretsiz hesabınızı açın, API anahtarınızı alın ve ilk Turnstile token'ınızı dakikalar içinde çözün.

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