In dit artikel hebben we geprobeerd antwoord te geven op alle belangrijke vragen. De eerste stap bij het oplossen van het vraagstuk is vaststellen welk beveiligingssysteem wordt gebruikt. Daarvoor kun je de lijst met populaire captcha’s en anti-botbeveiligingssystemen raadplegen, met visuele voorbeelden en kernkenmerken die je helpen snel te bepalen waarmee je te maken hebt.
Als je ontdekt dat je website GeeTest CAPTCHA v4 gebruikt, is de volgende stap om de eigenschappen en werking ervan uitgebreider te bestuderen. In dit artikel vind je ook een handleiding voor het integreren van GeeTest CAPTCHA v4, zodat je volledig begrijpt hoe het systeem op je website werkt. Zo kun je niet alleen de huidige bescherming beter doorgronden, maar ook het onderhoud ervan goed plannen.
Bij het testen van formulieren met GeeTest CAPTCHA v4 moet je vaak bevestigen dat de captcha goed is ingebouwd en werkt.
Je kunt de captcha op je site handmatig testen.
Voor automatische oplossingen kun je tools zoals CapMonster Cloud gebruiken. Deze ontvangen de captcha-parameters, verwerken ze op hun servers en sturen een token terug dat je in het formulier kunt zetten om de controle zonder gebruikersinteractie te omzeilen.
Werken met CapMonster Cloud via de API bestaat doorgaans uit de volgende stappen:
In het verzoek om GeeTest CAPTCHA v4 op te lossen moeten de volgende parameters worden opgegeven:
type - GeeTestTask;
websiteURL - het adres van de pagina waarop de captcha wordt opgelost;
gt - GeeTest-identifier voor het domein – parameter captcha_id;
version - 4;
geetestApiServerSubdomain - subdomein van de GeeTest-API-server (moet verschillen van api.geetest.com);
geetestGetLib - pad naar het captcha-script voor de weergave op de pagina. Dit kan voor sommige sites vereist zijn;
initParameters - extra parameters voor versie 4, gebruikt samen met “riskType” (het type captcha/de eigenschappen van de controle).
https://api.capmonster.cloud/createTask{
"clientKey": "YOUR_CAPMONSTER_CLOUD_API_KEY",
"task": {
"type": "GeeTestTask",
"websiteURL": "https://gt4.geetest.com/",
"gt": "54088bb07d2df3c46b79f80300b0abbe",
"version": 4,
"initParameters": {
"riskType": "slide"
}
}
}{
"errorId":0,
"taskId":407533072
}https://api.capmonster.cloud/getTaskResult{
"clientKey":"API_KEY",
"taskId": 407533072
}{
"errorId": 0,
"status": "ready",
"solution": {
"captcha_id": "f5c2ad5a8a3cf37192d8b9c039950f79",
"lot_number": "bcb2c6ce2f8e4e9da74f2c1fa63bd713",
"pass_token": "edc7a17716535a5ae624ef4707cb6e7e478dc557608b068d202682c8297695cf",
"gen_time": "1683794919",
"captcha_output": "XwmTZEJCJEnRIJBlvtEAZ662T...[cut]...SQ3fX-MyoYOVDMDXWSRQig56"
}
}
// npm install playwright @zennolab_com/capmonstercloud-client
import { chromium } from "playwright";
import {
CapMonsterCloudClientFactory,
ClientOptions,
GeeTestRequest
} from "@zennolab_com/capmonstercloud-client";
const CAPMONSTER_API_KEY = "YOUR_CAPMONSTER_API_KEY";
async function solveGeetestV4(pageUrl) {
const browser = await chromium.launch({ headless: false });
const context = await browser.newContext({ viewport: null });
const page = await context.newPage();
let detected = null;
let solutionObj = null;
// 1. De /load-response onderscheppen (captcha_id, challenge, enz. bepalen)
page.on("response", async (response) => {
const url = response.url();
if (!url.startsWith("https://gcaptcha4.geetest.com/load?")) return;
const params = new URLSearchParams(url.split("?")[1] || "");
const captchaId = params.get("captcha_id");
const challenge = params.get("challenge");
const captchaType = params.get("captcha_type");
if (captchaId && challenge) {
detected = { captchaId, challenge, captchaType };
console.log("Detected GeeTest v4 load:", detected);
}
});
// 2. De pagina laden
console.log("Opening page:", pageUrl);
await page.goto(pageUrl, { waitUntil: "domcontentloaded" });
// 3. Wachten tot /load is onderschept
console.log("Waiting for GeeTest /load...");
while (!detected) {
await page.waitForTimeout(500);
}
// 4. De taak naar CapMonster Cloud sturen
console.log("Sending task to CapMonster...");
const cmc = CapMonsterCloudClientFactory.Create(
new ClientOptions({ clientKey: CAPMONSTER_API_KEY })
);
const task = new GeeTestRequest({
websiteURL: pageUrl,
gt: detected.captchaId,
challenge: detected.challenge,
version: "4",
initParameters: {
riskType: detected.captchaType || "slide"
}
});
const solveRes = await cmc.Solve(task);
const sol = solveRes.solution || solveRes;
solutionObj = {
captcha_id: sol.captcha_id || detected.captchaId,
captcha_output: sol.captcha_output,
lot_number: sol.lot_number,
pass_token: sol.pass_token
};
console.log("Got solution from CapMonster:", solutionObj);
// 5. Eigen waarden in /verify invullen om een succesvolle response te krijgen
await page.route("https://gcaptcha4.geetest.com/verify*", async (route) => {
console.log("Intercepted /verify, injecting fake success...");
const body = `geetest_${Date.now()}(${JSON.stringify({
status: "success",
data: {
result: "success",
seccode: {
captcha_id: solutionObj.captcha_id,
captcha_output: solutionObj.captcha_output,
lot_number: solutionObj.lot_number,
pass_token: solutionObj.pass_token
}
}
})})`;
await route.fulfill({
status: 200,
contentType: "application/javascript",
body
});
});
// 6. De actie van een gebruiker nabootsen (bijvoorbeeld op de captchaknop klikken)
console.log("Waiting for captcha interaction...");
await page.waitForTimeout(3000);
// Voorbeeld van een verificatie-aanroep:
try {
await page.click('.geetest_btn'); // captchaknop
console.log("Clicked captcha button");
} catch {
console.log("Captcha button not found");
}
// Soms moet verify() handmatig worden aangeroepen:
await page.evaluate(() => {
if (window.initGeetest4 && typeof verify === "function") {
verify();
}
});
console.log("Waiting for verification request...");
await page.waitForTimeout(3000);
await browser.close();
return { detected, solution: solutionObj };
}
(async () => {
const url = "https://example.com"; // vervang dit door een pagina met GeeTest v4
const res = await solveGeetestV4(url);
console.log("FINISHED:", res);
})();
1. Registreer je of log in bij je GeeTest-account.
2. Ga naar het Captcha Dashboard en kies Behavior Verification v4:

3. Klik in het dashboard op + Create application.
4. Vul APP/website name in (de naam van de site of applicatie waar de captcha wordt gebruikt), Address (het hoofddomein van de site waar de captcha wordt geïnstalleerd, bijvoorbeeld https://example.com), Industry (de categorie van de site, bijvoorbeeld “E-commerce”, “Social Media”, enz.) en klik op Confirm.
5. Klik op Add events naast de zojuist aangemaakte applicatie. Geef Event op – de naam van het specifieke scenario (event) waarin de captcha wordt gebruikt, bijvoorbeeld login, register enz.; Device – het platform (bijvoorbeeld Web/Wap); Business types – het type gebruiksscenario voor de captcha (bijvoorbeeld Sign-up / Sign-in — registratie / aanmelding). Klik op Add.
6. In je dashboard verschijnen nu de ID (gebruikt aan client- en serverzijde) en de Key (gebruikt aan serverzijde voor verificatie) van de aangemaakte captcha:

7. Sluit de client-kant aan
Voeg het script toe:
<script src="https://static.geetest.com/v4/gt4.js"></script>Initialiseer de CAPTCHA:
initGeetest4(
{ captchaId: "Your CaptchaId" },
function (captcha) {
captcha.appendTo("#captcha"); // in een element op de pagina invoegen
}
);Belangrijk:
<!-- Het CAPTCHA-script toevoegen -->
<script src="https://static.geetest.com/v4/gt4.js"></script>
</head>
<body>
<h1>CAPTCHA Demo</h1>
<!-- Container voor de CAPTCHA -->
<div id="captcha"></div>
<script>
// Initialisatie van de CAPTCHA
initGeetest4(
{
captchaId: "YOUR_CAPTCHA_ID" // vervang dit door je eigen CaptchaId
},
function (captcha) {
// De CAPTCHA in een elemento van de pagina invoegen
captcha.appendTo("#captcha");
// Hier kun je een succesvolle verificatie afhandelen
captcha.onSuccess(function() {
const validate = captcha.getValidate();
console.log("CAPTCHA passed!", validate);
// Hier kun je validate naar de server sturen voor verificatie
});
}
);
</script>
8. Configureer de server-kant.
Wanneer de gebruiker de CAPTCHA op de frontend voltooit, wordt een set parameters gegenereerd. Deze parameters moeten naar de backend worden gestuurd en vervolgens via de secundaire GeeTest-API worden gecontroleerd om te bevestigen dat de verificatie is geslaagd.
Secundaire verificatie-API:
http://gcaptcha4.geetest.com/validateBelangrijkste requestparameters
{
"status": "success",
"result": "success",
"reason": "",
"captcha_args": {
"used_type": "slide",
"user_ip": "127.0.0.1",
"lot_number": "4dc3cfc2cdff448cad8d13107198d473",
"scene": "anti crawler",
"referer": "http://127.0.0.1:8077/"
}
}<?php
$captcha_id = 'YOUR_CAPTCHA_ID';
$captcha_key = 'YOUR_CAPTCHA_KEY';
$api_server = 'http://gcaptcha4.geetest.com';
// Parameters van de frontend ontvangen
$lot_number = $_POST['lot_number'] ?? '';
$captcha_output = $_POST['captcha_output'] ?? '';
$pass_token = $_POST['pass_token'] ?? '';
$gen_time = $_POST['gen_time'] ?? '';
// De handtekening genereren
$sign_token = hash_hmac('sha256', $lot_number, $captcha_key);
// De gegevens voor het verzoek opbouwen
$data = [
'lot_number' => $lot_number,
'captcha_output' => $captcha_output,
'pass_token' => $pass_token,
'gen_time' => $gen_time,
'sign_token' => $sign_token
];
// Verzoek naar de secundaire verificatie-API
$url = $api_server . '/validate?captcha_id=' . $captcha_id;
$options = [
'http' => [
'header' => "Content-type: application/x-www-form-urlencoded\r\n",
'method' => 'POST',
'content' => http_build_query($data),
'timeout' => 5
]
];
$context = stream_context_create($options);
$result = @file_get_contents($url, false, $context);
if ($result === FALSE) {
$response = ['login' => 'fail', 'reason' => 'request geetest api fail'];
} else {
$gt_msg = json_decode($result, true);
if ($gt_msg['result'] === 'success') {
$response = ['login' => 'success', 'reason' => $gt_msg['reason']];
} else {
$response = ['login' => 'fail', 'reason' => $gt_msg['reason']];
}
}
echo json_encode($response);
?>
Als je een website in beheer krijgt waarop al een captcha of een ander beveiligingssysteem is geïnstalleerd en je geen toegang hebt tot de code, is dat geen probleem! Het is vrij eenvoudig te bepalen welke technologie precies wordt gebruikt. Voor het controleren of alles correct werkt, kun je de herkenningsservice CapMonster Cloud in een geïsoleerde testomgeving gebruiken, zodat je zeker weet dat het tokenverwerkingsmechanisme en de validatielogica correct functioneren.
In het geval van GeeTest CAPTCHA v4 is het voldoende om het systeem te herkennen, het gedrag te analyseren en te bevestigen dat de beveiliging correct werkt. In het artikel hebben we laten zien hoe je GeeTest CAPTCHA v4 kunt herkennen en waar je instructies vindt om het te koppelen of opnieuw te configureren, zodat je de bescherming met vertrouwen kunt onderhouden en de werking onder controle kunt houden.