Hızlı başlangıç
- 1Konsolu aç ve bir hesap numarası oluştur. Her hesaba hazır bir API anahtarı verilir.
- 2Bakiye yükle.
- 3Aşağıdaki isteği kendi anahtarınla gönder; cevapta token gelir.
curl -G "https://resolver.guru/v1/api" \
--data-urlencode "key=xxxxxxxxxxxx" \
--data-urlencode "sitekey=0x4AAAAAAA..." \
--data-urlencode "url=https://example.com/login"Kimlik doğrulama
Her istekte API anahtarını key parametresiyle, diğer parametrelerle birlikte adresin sonunda gönder. Anahtarlarını konsolun API anahtarları bölümünden oluşturup iptal edebilirsin.
Anahtar adresin bir parçası olduğu için, istek adreslerini kaydeden araçlarda (log, hata izleme) görünebilir. Bu kayıtları paylaşma; anahtarın sızdığını düşünürsen konsoldan iptal edip yenisini oluştur.
https://resolver.guru/v1/api?key=xxxxxxxxxxxx&sitekey=…&url=…Anahtarını tarayıcıda çalışan koda (frontend) koyma. İstekleri her zaman kendi sunucundan gönder.
Token isteği
İstek GET ile gönderilir; parametreler adresin sonuna sorgu dizesi (query string) olarak eklenir. Değerleri URL-encode etmeyi unutma (örnekteki kütüphaneler bunu kendisi yapar).
| Parametre | Tür | Zorunlu | Açıklama |
|---|---|---|---|
sitekey | string | Evet | Hedef sayfadaki Turnstile widget’ının data-sitekey değeri. Genelde 0x4AAAA… ile başlar. |
url | string | Evet | Widget’ın bulunduğu sayfanın tam adresi (https://…). |
action | string | Hayır | Widget’ta data-action varsa aynı değer. Yoksa gönderme. |
cdata | string | Hayır | Widget’ta data-cdata varsa aynı değer. Yoksa gönderme. |
curl -G "https://resolver.guru/v1/api" \
--data-urlencode "key=xxxxxxxxxxxx" \
--data-urlencode "sitekey=0x4AAAAAAA..." \
--data-urlencode "url=https://example.com/login" \
--data-urlencode "action=login" \
--data-urlencode "cdata=abc123"sitekey’i nerede bulurum?
Hedef sayfanın HTML’inde cf-turnstile sınıflı öğeye ya da turnstile.render(…) çağrısına bak:
<div class="cf-turnstile"
data-sitekey="0x4AAAAAAA..." // → sitekey
data-action="login" // → action
data-cdata="abc123"></div> // → cdataCevap
Başarılı cevap 200 döner:
{
"status": "success",
"token": "0.Rk9aXw3QpL7mT2vB8nYc...",
"solve_time": 1.21
}status | success ya da error |
token | Turnstile token’ı. Formuna ya da isteğine ekleyeceğin değer. |
solve_time | Çözüm süresi (saniye). |
Her cevapta kalan bakiyen X-Balance başlığında (USD) gelir.
Hata durumunda status: "error", makinece okunur bir error kodu ve açıklama döner:
{
"status": "error",
"error": "insufficient_balance",
"message": "Your balance is too low. Top up in the console."
}Hata kodları
| Kod | HTTP | Anlamı | Ücret |
|---|---|---|---|
missing_api_key | 401 | key parametresi yok. | Alınmaz |
invalid_api_key | 401 | Anahtar geçersiz ya da iptal edilmiş. | Alınmaz |
sitekey_required | 400 | sitekey gönderilmedi. | Alınmaz |
invalid_url | 400 | url tam bir http(s) adresi değil. | Alınmaz |
insufficient_balance | 402 | Bakiye yetersiz. Konsoldan yükle. | Alınmaz |
too_many_concurrent | 429 | Hesabında aynı anda çok fazla istek var. Kısa süre sonra tekrar dene. | Alınmaz |
solve_failed | 422 | Bu deneme çözülemedi. Tekrar denenebilir. | Alınmaz |
timeout | 504 | Çözüm çok uzun sürdü. Tekrar denenebilir. | Alınmaz |
solver_unavailable | 504 | Servis geçici olarak ulaşılamıyor. | Alınmaz |
solver_not_configured | 503 | Servis geçici olarak kullanılamıyor. | Alınmaz |
Örnekler
Gerçek anahtarını konsoldan kopyalayıp xxxxxxxxxxxx yerine yaz.
import requests
def solve(sitekey, url, action=None, cdata=None):
params = {"key": "xxxxxxxxxxxx", "sitekey": sitekey, "url": url}
if action: params["action"] = action
if cdata: params["cdata"] = cdata
res = requests.get(
"https://resolver.guru/v1/api",
params=params,
timeout=100,
)
data = res.json()
if data["status"] != "success":
raise RuntimeError(data["error"])
return data["token"]
token = solve("0x4AAAAAAA...", "https://example.com/login")Token’ı kullanma
Token’ı, hedef sitenin formunda Turnstile’ın gönderdiği alana koy. Varsayılan alan adı cf-turnstile-response’dur.
Turnstile token’ları yaklaşık 300 saniye geçerlidir ve yalnızca bir kez kullanılabilir. Token’ı aldıktan hemen sonra kullan; her gönderim için yeni token iste.
Ücret ve limitler
- Fiyat: 1.000 token başı $0.30 (token başı $0.00030). Abonelik yok.
- Sadece başarılı çözümler ücretlendirilir. Hata dönen isteklerde bakiyenden bir şey düşmez.
- Aynı anda hesap başına en çok 20 istek işlenir; fazlası
429döner. - Bir çözüm en fazla 90 saniye sürebilir. İstemci tarafında zaman aşımını en az 100 saniye yap.
solve_failed,timeoutve429için birkaç saniye bekleyip 2–3 kez yeniden denemek yeterlidir.