Dokümantasyon
SolverFlex API ile Cloudflare Turnstile token'larını tek bir HTTP isteğiyle alırsın.
API_KEY yerine kendi anahtarını yaz. Anahtarını hesap açarak alabilirsin.Giriş
Tüm istekler tek bir adrese gider ve JSON döner. Taban adres:
En kısa kullanım:
curl 'https://api.solverflex.top/solve?key=API_KEY&sitekey=0x4AAAAAAA...&origin=https://site.com'Yanıt süresi genellikle bir saniyenin altındadır. Cevaptaki ms alanı sunucudaki gerçek çözüm süresidir.
Kimlik doğrulama
Her istekte key parametresiyle API anahtarını gönder. Anahtarları panelden oluşturur, etiketler ve iptal edersin. İptal edilen veya askıdaki hesaba ait anahtar 401 döner.
Çözüm isteği
Verilen sitekey ve origin için bir Turnstile token'ı üretir.
Parametreler
| Ad | Zorunlu | Açıklama |
|---|---|---|
key | evet | API anahtarın. |
sitekey | evet | Turnstile site anahtarı. 0x4 ile başlar; sayfa kaynağında data-sitekey olarak bulunur. |
origin | evet | Widget'ın yüklendiği sayfanın adresi (https://site.com). http:// veya https:// ile başlamalı. |
action | hayır | Widget'ta tanımlıysa data-action değeri. |
cdata | hayır | Widget'ta tanımlıysa data-cdata değeri. |
Yanıtlar
Başarılı
{
"token": "1.0gozLxH7N6QQlTC2...",
"ms": 1043
}Hata
{
"error": "no token",
"ms": 1380
}no token, Cloudflare'in bu denemede token vermediği anlamına gelir. HTTP durumu 200 olur; aynı isteği tekrar deneyebilirsin. Başarısız denemeler kotandan düşmez.
Hata kodları
| HTTP | error | Anlamı |
|---|---|---|
| 400 | sitekey required · origin required | Zorunlu parametre eksik. |
| 400 | sitekey invalid · origin must start with http(s):// | Parametre biçimi geçersiz. |
| 401 | key required · bad key | Anahtar eksik veya tanınmıyor. |
| 401 | key revoked · account suspended | Anahtar iptal edilmiş veya hesap askıda. |
| 403 | no quota assigned | Hesabına henüz kota tanımlanmamış. |
| 429 | quota exceeded (X/Y) | Hesap kotası doldu. |
| 502 | upstream unreachable | Çözücüye ulaşılamadı; kısa süre sonra tekrar dene. |
| 200 | no token | Bu denemede token alınamadı; tekrar dene. |
Token'ı kullanma
Dönen token'ı, hedef sitenin Turnstile ile korunan isteğine ekle. Çoğu sitede bu bir form alanıdır: cf-turnstile-response. Doğru alan adı ve gönderim biçimini sitenin gerçek isteğine tarayıcı geliştirici araçlarının ağ sekmesinden bakarak bul.
# 1) çözücüden token al (yukarıdaki istek)
# 2) token'ı hedef sitenin formuna ekle
curl -X POST https://site.com/login \
-d 'username=foo' -d 'password=bar' \
-d 'cf-turnstile-response=TOKEN'res = requests.post('https://site.com/login', data={
'username': 'foo',
'password': 'bar',
'cf-turnstile-response': token,
})await fetch('https://site.com/login', {
method: 'POST',
body: new URLSearchParams({
username: 'foo', password: 'bar',
'cf-turnstile-response': token,
}),
});Kod örnekleri
Seçtiğin dil tüm örneklerde hatırlanır.
# token'ı yalnızca ekrana yazdır
curl -s 'https://api.solverflex.top/solve?key=API_KEY&sitekey=0x4AAAAAAA...&origin=https://site.com'
# action ve cdata ile
curl -s -G 'https://api.solverflex.top/solve' \
--data-urlencode 'key=API_KEY' \
--data-urlencode 'sitekey=0x4AAAAAAA...' \
--data-urlencode 'origin=https://site.com' \
--data-urlencode 'action=login' \
--data-urlencode 'cdata=user42'import requests
r = requests.get('https://api.solverflex.top/solve', params={
'key': 'API_KEY',
'sitekey': '0x4AAAAAAA...',
'origin': 'https://site.com',
# 'action': 'login',
# 'cdata': 'user42',
}, timeout=90).json()
if 'token' in r:
print(r['token'], r['ms'], 'ms')
else:
print('hata:', r['error'])const url = new URL('https://api.solverflex.top/solve');
url.searchParams.set('key', 'API_KEY');
url.searchParams.set('sitekey', '0x4AAAAAAA...');
url.searchParams.set('origin', 'https://site.com');
const r = await fetch(url, { signal: AbortSignal.timeout(90000) }).then(r => r.json());
if (r.token) console.log(r.token, r.ms + ' ms');
else console.error('hata:', r.error);<?php
$q = http_build_query([
'key' => 'API_KEY',
'sitekey' => '0x4AAAAAAA...',
'origin' => 'https://site.com',
]);
$r = json_decode(file_get_contents('https://api.solverflex.top/solve?' . $q), true);
echo isset($r['token']) ? $r['token'] : 'hata: ' . $r['error'];u := "https://api.solverflex.top/solve?key=API_KEY&sitekey=0x4AAAAAAA...&origin=https://site.com"
resp, err := http.Get(u)
if err != nil { log.Fatal(err) }
defer resp.Body.Close()
var r struct {
Token string `json:"token"`
Error string `json:"error"`
Ms int `json:"ms"`
}
json.NewDecoder(resp.Body).Decode(&r)
fmt.Println(r.Token, r.Error, r.Ms)Kota ve limitler
- Yeni hesaplarda kota başlangıçta tanımlı değildir; kota yönetici tarafından tanımlanır. Tanımlanana kadar istekler
403döner. - Kota olarak yalnızca token dönen başarılı çözümler sayılır.
- Kotanı ve kullanımını panelde görürsün. Kota doluysa
429döner. - İstemcinde en az 90 saniyelik zaman aşımı kullan.
- Sağlık kontrolü için
GET https://api.solverflex.top/healthkullanılabilir; anahtar gerektirmez.
Deneme alanı
İsteği buradan canlı dene. Başarılı her çözüm kotandan düşer.
Sık sorulanlar
Sitekey'i nereden bulurum?
Turnstile widget'ının HTML'inde data-sitekey özniteliği olarak yer alır. Sayfa kaynağında 0x4 ile başlayan değeri ara.
action ve cdata ne zaman gerekir?
Sitenin widget ayarında bu değerler tanımlıysa, aynı değerleri göndermelisin. Tanımlı değilse göndermene gerek yok.
no token alıyorum, ne yapmalıyım?
Aynı isteği tekrar dene; geçici bir durumdur ve kotandan düşmez. Sürekli alıyorsan sitekey ve origin değerlerinin sayfadakiyle aynı olduğunu kontrol et.
Kotamı nasıl artırırım?
Kota yönetici tarafından belirlenir. Artırım için yönetici ile iletişime geç.