Bu makalede tüm önemli sorulara cevap vermeye çalıştık. Bir problemi çözmeye başlamanın ilk adımı, hangi koruma sisteminin kullanıldığını belirlemektir. Bunun için, görsel örneklerin ve neyle karşı karşıya olduğunuzu hızlıca anlamanıza yardımcı olabilecek temel işaretlerin yer aldığı popüler captcha ve anti-bot koruma sistemleri listesine başvurabilirsiniz.
Sitenizde FunCaptcha (Arkose Labs CAPTCHA) kullanıldığını fark ederseniz, bir sonraki adım özelliklerini ve çalışma şeklini daha ayrıntılı incelemek olacaktır. Yine bu makalede, FunCaptcha (Arkose Labs CAPTCHA) sisteminin entegrasyonuna ilişkin kılavuzu da bulabilir ve böylece sitenizde nasıl çalıştığını tamamen anlayabilirsiniz. Bu da yalnızca mevcut korumayı anlamanıza değil, aynı zamanda bakımını doğru şekilde planlamanıza da yardımcı olur.
CapMonster Cloud ile FunCaptcha nasıl çözülür
- Formun bulunduğu sayfayı açın ve captcha'nın görünür olduğundan emin olun.
- Captcha çözmeden formu göndermeyi deneyin — sunucu hata döndürmelidir.
- Captcha başarıyla çözüldükten sonra — form hatasız gönderilmelidir.
CapMonster Cloud API ile çalışma genellikle şu adımlardan oluşur:
type - FunCaptchaTask
websiteURL - captcha'nın çözüleceği sayfanın adresi;
websitePublicKey - FunCaptcha anahtarı (değer public key veya pk);
data - ek parametre. Site data[blob] kullanıyorsa zorunlu;
funcaptchaApiJSSubdomain - Arkose Labs alt alan adı (değer surl). Standarttan farklıysa belirtin: client-api.arkoselabs.com
userAgent - Tarayıcı User-Agent. yalnızca geçerli Windows UA'sını gönderin.
Bu görev için proxy kullanmanız gerekir:
proxyType :
- http - standart HTTP/HTTPS proxy;
- https - 'http' çalışmazsa deneyin (bazı özel proxyler için gerekir);
- socks4 - SOCKS4 tipi proxy;
- socks5 - SOCKS5 tipi proxy.
proxyAddress - IPv4/IPv6 proxy IP adresi.
proxyPort - Proxy portu.
proxyLogin - Proxy sunucu kullanıcı adı.
proxyPassword - Proxy sunucu şifresi.
https://api.capmonster.cloud/createTask
{
"clientKey": "API_KEY",
"task": {
"type": "FunCaptchaTask",
"websiteURL": "https://www.example.com",
"websitePublicKey": "EX72CCFB-26EX-40E5-91E6-85EX70BE98ED",
"funcaptchaApiJSSubdomain": "example-api.arkoselabs.com",
"data": "{\"blob\":\"nj9UbL+yio7goOlTQ/b64t.ayrrBnP6kPgzlKYCP/kv491lKS...Wot/7gjpyIxs7VYb0+QuRcfQ/t6bzh5pXDkOFSskA/V/ITSVZSAlglIplLcdreZ4PE8skfMU6k1Q\"}",
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36",
"proxyType": "http", // Gerekirse proxy ekleyin
"proxyAddress": "8.8.8.8",
"proxyPort": 8080,
"proxyLogin": "proxyLoginHere",
"proxyPassword": "proxyPasswordHere"
}
}
{
"errorId":0,
"taskId":407533072
}https://api.capmonster.cloud/getTaskResult{
"clientKey":"API_KEY",
"taskId": 407533072
}
{
"errorId": 0,
"errorCode": null,
"errorDescription": null,
"solution": {
"token": "337187b9f57678923.5060184402|r=us-west-2|lang=en|pk=EX72CCFB-26EX-40E5-91E6-85EX70BE98ED|at=40|ag=101|cdn_url=https%3A%2F%2Fclient-api.arkoselabs.com%2Fcdn%2Ffc|surl=https%3A%2F%2Fclient-api.arkoselabs.com|smurl=https%3A%2F%2Fclient-api.arkoselabs.com%2Fcdn%2Ffc%2Fassets%2Fstyle-manager",
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36"
},
"status": "ready"
}
// npm install playwright
const { chromium } = require("playwright");
const WEBSITE_URL = "https://example.com";
// CapMonster Cloud'dan alınan token
const FUN_CAPTCHA_TOKEN = "PUT_YOUR_FUN_CAPTCHA_TOKEN_HERE";
(async () => {
const browser = await chromium.launch({ headless: false });
const context = await browser.newContext();
const page = await context.newPage();
/**
* Evrensel Arkose yakalama (v1 / v2)
* Sayfa yüklemeden önce çalışır
*/
await page.addInitScript(() => {
const callbacks = [];
function captureCallback(cb, source) {
if (typeof cb === "function") {
callbacks.push(cb);
console.log("[Arkose] callback captured from", source);
}
}
function patchRender(obj, name) {
if (!obj || typeof obj.render !== "function") return;
const originalRender = obj.render;
obj.render = function (container, options = {}) {
captureCallback(options.callback, name + ".render");
return originalRender.apply(this, arguments);
};
}
// Object.defineProperty ile yakalama (Arkose tarafından sık kullanılır)
const originalDefineProperty = Object.defineProperty;
Object.defineProperty = function (target, prop, descriptor) {
if (
(prop === "FunCaptcha" || prop === "ArkoseEnforcement") &&
descriptor &&
typeof descriptor.value === "object"
) {
patchRender(descriptor.value, prop);
}
return originalDefineProperty.apply(this, arguments);
};
// Fallback: global nesneleri periyodik kontrol
const interval = setInterval(() => {
if (window.FunCaptcha) patchRender(window.FunCaptcha, "FunCaptcha");
if (window.ArkoseEnforcement)
patchRender(window.ArkoseEnforcement, "ArkoseEnforcement");
if (callbacks.length > 0) clearInterval(interval);
}, 200);
// Token iletimi için evrensel nokta
window.__arkoseSolve = function (token) {
if (callbacks.length > 0) {
callbacks.forEach((cb) => cb(token));
console.log("[Arkose] token delivered via captured callbacks");
return true;
}
// Alternatif seçenekler
if (typeof window.arkoseCallback === "function") {
window.arkoseCallback(token);
console.log("[Arkose] token delivered via arkoseCallback");
return true;
}
// Fallback
window._arkoseToken = token;
console.log("[Arkose] token stored in window._arkoseToken");
return false;
};
});
/**
* Sayfayı aç
*/
console.log("Opening page...");
await page.goto(WEBSITE_URL, { waitUntil: "domcontentloaded" });
/**
* Burada site FunCaptcha başlatmalı
* (kayıt, giriş, buton, form vb.)
*/
/**
* Hazır tokenı gönder
*/
console.log("Injecting FunCaptcha token...");
await page.evaluate((token) => {
if (!window.__arkoseSolve) {
console.log("[Arkose] solver not ready");
return;
}
window.__arkoseSolve(token);
}, FUN_CAPTCHA_TOKEN);
/**
* Sayfaya sonucu işlemesi için zaman ver
*/
await page.waitForTimeout(5000);
console.log("Done.");
await browser.close();
})();
- Arkose Labs’a kaydolun ve Arkose Command Center erişimi alın (form üzerinden sohbet ederek verilerinizi gönderebilirsiniz — örn: buradan veya buradan).
Erişim aldıktan sonra Settings → Keys bölümünden iki anahtar (Public / Private) alın.

Gerekirse Customer Success Manager (CSM) ile iletişime geçin:
- Özel API alan adları almak için;
- API istek ve yanıt şemalarını doğrulamak için.
Arkose önerileri
- Test için Development Key kullanın.
- Her workflow için ayrı Production Key kullanın (login, register, purchase vb.).
- Farklı siteler için farklı anahtarlar kullanın.
Genel çalışma süreci
- İstemci verileri toplar ve gerekirse challenge gösterir.
- İstemci tek kullanımlık session token alır.
- Sunucu tokenı Arkose Verify API ile doğrular.
Adım 1. İstemci tarafı entegrasyonu
Tarayıcıda (Arkose Bot Manager):
- Kullanıcı davranışını analiz eder;
- Gerekirse Enforcement Challenge gösterir;
- Session token döndürür.
Client API:
- Testler için kullanılabilir:
client-api.arkoselabs.com - Prodüksiyonda özel alan adı önerilir:
<company>-api.arkoselabs.com
Temel gereksinimler
- Arkose istemci scripti sayfada yalnızca bir kez yüklenmelidir
- Zorunlu global callback tanımlayın
- setConfig() çağırılmalıdır
- Sonuca göre işlem onaylanır veya reddedilir.
İstemciden çıkan sonuç — token sunucuya gönderilmelidir.
<html>
<head>
<!--
Sayfanın <head> kısmına Arkose Labs API ekleyin. Örnekte:
- <YOUR PUBLIC KEY> yerine Arkose Labs tarafından verilen public key kullanın;
- <YOUR CALLBACK> yerine aşağıda tanımlayacağınız global callback fonksiyonun adını kullanın.
Örnek:
<script src="//client-api.arkoselabs.com/v2/<YOUR PUBLIC KEY>/api.js"
data-callback="setupDetect"></script>
-->
<script src="//client-api.arkoselabs.com/v2/<YOUR PUBLIC KEY>/api.js" data-callback="<YOUR CALLBACK>"></script>
<link rel="shortcut icon" href="#">
<meta charset="UTF-8">
</head>
<body>
<!--
Tetikleyici öğe sayfanın herhangi bir yerinde olabilir ve DOM’a herhangi bir zamanda eklenebilir.
-->
<button id="arkose-trigger">
tetikleyici öğe
</button>
<!--
Arkose'u ayarlamak için (detection veya enforcement mod) scripti </body> kapanışından önce yerleştirin ve callback fonksiyonunu global olarak tanımlayın.
-->
<script>
/*
Bu global fonksiyon, Arkose API hazır olduğunda çağrılır. Fonksiyon adı script'in data-callback özniteliği ile aynı olmalıdır.
*/
function setupArkose(myArkose) {
myArkose.setConfig({
selector: '#arkose-trigger',
onCompleted: function(response) {
// Sunucuya gönderilecek tek kullanımlık token
console.log(response.token);
}
});
}
</script>
</body>
</html>
Adım 2. Sunucu tarafı doğrulama
Sunucuda token Arkose Verify API ile doğrulanır.
Verify API endpoint
https://<company>-verify.arkoselabs.com/api/v4/verify/Gerekli parametreler
- private_key — Arkose private key
- session_token — İstemciden alınan token
POST örnek gövdesi
{
"private_key": "_PRIVATE_KEY_HERE_",
"session_token": "_SESSION_TOKEN_HERE_",
"log_data": "_LOG_DATA_HERE_"
}
API cevabı oturum bilgisi ve doğrulama sonucunu içerir.
Ana noktalar
- Public Key — yalnızca istemci
- Private Key — yalnızca sunucu
- Token tek kullanımlık
- Sunucu doğrulaması olmadan captcha geçersiz sayılır
- Arkose arka planda çalışabilir ve sadece risk varsa challenge gösterir
<?php
$private_key = 'YOUR_PRIVATE_KEY';
$verify_url = 'https://<company>-verify.arkoselabs.com/api/v4/verify/';
$input = json_decode(file_get_contents('php://input'), true);
$session_token = $input['session_token'] ?? null;
$log_data = $input['log_data'] ?? '';
$email_address = $input['email_address'] ?? '';
if (!$session_token) {
http_response_code(400);
echo json_encode(['error' => 'Session token eksik']);
exit;
}
$data = [
'private_key' => $private_key,
'session_token' => $session_token,
'log_data' => $log_data,
'email_address' => $email_address
];
$options = [
'http' => [
'header' => "Content-Type: application/json\r\n",
'method' => 'POST',
'content' => json_encode($data),
],
];
$context = stream_context_create($options);
$result = file_get_contents($verify_url, false, $context);
if ($result === FALSE) {
http_response_code(500);
echo json_encode(['error' => 'Captcha doğrulamada hata']);
exit;
}
echo $result;
?>
Nasıl çalışır:
- Kullanıcı captcha'yı sitede çözer ve session token alır.
- Kullanıcı token'ı POST ile sunucuya gönderir.
- Sunucu Arkose Verify API çağırır ve private key ile session token gönderir
- Arkose JSON döndürür, oturum bilgisi ve doğrulama durumu içerir.
- Sunucu sonucu (result.success) kontrol eder ve kullanıcıya izin verilip verilmeyeceğine karar verir.
Desteklenen captchas
Kodu üzerinde erişiminiz olmayan, ancak üzerinde zaten bir captcha veya başka bir koruma sistemi kurulmuş bir site devraldıysanız, sorun değil! Hangi teknolojinin kullanıldığını tespit etmek oldukça kolaydır. Çalışmanın düzgün olup olmadığını kontrol etmek için ise, izole bir test ortamında CapMonster Cloud tanıma servisinden yararlanarak, jeton işleme mekanizmasının ve doğrulama mantığının doğru şekilde çalıştığından emin olabilirsiniz.
FunCaptcha söz konusu olduğunda, sistemi tanımlamak, davranışını incelemek ve korumanın düzgün çalıştığını doğrulamak yeterlidir. Bu yazıda, FunCaptcha nasıl tespit edilir ve entegrasyonu ya da yeniden yapılandırılması için talimatların nerede bulunabileceği gösterdik; böylece korumayı güvenle sürdürebilir ve çalışmasını kontrol altında tutabilirsiniz.