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 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 :
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/143.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();
})();
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:
Arkose önerileri
Genel çalışma süreci
Adım 1. İstemci tarafı entegrasyonu
Tarayıcıda (Arkose Bot Manager):
Client API:
client-api.arkoselabs.com<company>-api.arkoselabs.comTemel gereksinimler
İ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
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
<?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:
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.