在本文中,我们尽量回答了所有关键问题。要开始解决问题,第一步是确定当前使用的是哪种防护系统。为此,您可以查看常见验证码与反机器人防护系统列表,其中提供了可视化示例和关键特征,帮助您快速判断自己正在使用哪一种方案。
如果您发现自己的网站使用的是 GeeTest CAPTCHA v3,下一步就是更深入地了解它的特性和具体工作方式。在本文中,您还可以查看 GeeTest CAPTCHA v3 的接入说明,以便彻底弄清它在您的网站上是如何运行的。这样一来,您不仅能更好地理解当前的防护机制,还可以更合理地规划后续的维护和支持。
GeeTest CAPTCHA v3 是一种用于保护网站免受可能对资源造成损害的自动化操作的安全系统。它可以区分真实用户和机器人,从而确保网站的安全性和稳定运行。
测试包含 GeeTest CAPTCHA v3 的表单时,常常需要确认 captcha 是否集成正确并工作正常。
你可以手动验证站点上的 captcha。
若想自动解题,可以使用 CapMonster Cloud 等服务,它会接收验证码参数、在服务器中解析并返回可直接使用的 token。把 token 注入表单即可无需人工操作通过验证。
通过 CapMonster Cloud API 工作的一般流程:
在发送 GeeTest CAPTCHA v3 的求解请求时,需要指定以下参数:
type - GeeTestTask;
websiteURL - 用户通过验证码的页面地址。正确的 URL 会在向 https://api-na.geetest.com/gettype.php 发送请求时,通过请求头 Referer 传递。;
gt - 该域名对应的 GeeTest gt 标识密钥;
challenge - 在每次任务之前,都需要发送请求以获取新的 challenge 值,否则使用过期的 token 将会触发错误 ERROR_TOKEN_EXPIRED;
geetestApiServerSubdomain - Geetest API 服务器的子域名(必须与 api.geetest.com 不同).
https://api.capmonster.cloud/createTask{
"clientKey":"YOUR_CAPMONSTER_CLOUD_API_KEY",
"task":
{
"type":"GeeTestTask",
"websiteURL":"https://www.example.com",
"gt":"022397c99c9f646f6477822485f30404",
"challenge":"7f044f48bc951ecfbfc03842b5e1fe59",
"geetestApiServerSubdomain":"api-na.geetest.com"
}
}{
"errorId":0,
"taskId":407533072
}https://api.capmonster.cloud/getTaskResult{
"clientKey":"API_KEY",
"taskId": 407533072
}{
"errorId":0,
"status":"ready",
"solution": {
"challenge":"0f759dd1ea6c4wc76cedc2991039ca4f23",
"validate":"6275e26419211d1f526e674d97110e15",
"seccode":"510cd9735583edcb158601067195a5eb|jordan"
}
}// npm install playwright @zennolab_com/capmonstercloud-client
// npx playwright install chromium
import { chromium } from 'playwright';
import { CapMonsterCloudClientFactory, ClientOptions, GeeTestRequest } from '@zennolab_com/capmonstercloud-client';
const API_KEY = 'your_capmonster_cloud_api_key';
const DEMO_PAGE = 'https://example.com';
(async () => {
const browser = await chromium.launch({ headless: false });
const page = await browser.newPage();
console.log('正在打开页面……');
await page.goto(DEMO_PAGE, { waitUntil: 'networkidle' });
console.log('正在获取验证码参数……');
const init = await page.evaluate(async () => {
// 向服务器发送请求以获取 GeeTest 的 init-params 参数,请将此处替换为你的接口地址
const r = await fetch(`/api/v1/example/gee-test/init-params?t=${Date.now()}`);
return r.json();
});
console.log('Init params:', init);
console.log('正在为 CapMonster Cloud 创建任务……');
const cmc = CapMonsterCloudClientFactory.Create(new ClientOptions({ clientKey: API_KEY }));
const solRaw = await cmc.Solve(new GeeTestRequest({ websiteURL: DEMO_PAGE, gt: init.gt, challenge: init.challenge }));
const sol = solRaw.solution || solRaw;
console.log('验证码求解结果:', sol);
console.log('将求解结果写入表单隐藏字段……');
await page.evaluate(s => {
['challenge','validate','seccode'].forEach(n => {
const el = document.querySelector(`input[name="geetest_${n}"]`);
if(el) el.value = s[n];
});
}, sol);
await page.click('button[data-action="test_action"]'); // 替换为你自己的值
console.log('向服务器发送 verify 校验请求……');
const result = await page.evaluate(async () => {
const payload = {
geetest_challenge: document.querySelector('input[name="geetest_challenge"]')?.value,
geetest_validate: document.querySelector('input[name="geetest_validate"]')?.value,
geetest_seccode: document.querySelector('input[name="geetest_seccode"]')?.value
};
// 替换为你自己的值
const r = await fetch('/api/v1/example/gee-test/verify', {
method:'POST',
headers:{'Content-Type':'application/json'},
body: JSON.stringify(payload)
});
return r.json();
});
console.log('验证码校验结果:', result);
await page.waitForTimeout(3000);
await browser.close();
})();1. 注册或登录你的 GeeTest 账号
2. 进入 Captcha Dashboard,选择 CAPTCHA v3:

3. 点击 +New Captcha 创建新的验证码。填写验证码名称(例如产品名或项目名)、将要集成验证码的网站 URL,并选择验证码的使用场景(例如 登录 / 注册 / 找回密码 等)。
4. 你将获得唯一的 CAPTCHA ID 和 KEY,可以在安全面板中进行配置。

5. 配置服务器端(Server SDK):
服务器会与两个 API 交互:
<?php
header('Content-Type: application/json');
const CAPTCHA_ID = '07df3141a35**********19a473d7c50';
const CAPTCHA_KEY = '543b19036ef********8e07d121b81e9';
$path = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
function getJson($url) {
$res = @file_get_contents($url);
return $res ? json_decode($res, true) : null;
}
// API1:初始化
if ($path === '/register') {
$data = getJson("https://api.geetest.com/register.php?gt=" . CAPTCHA_ID . "&json_format=1");
echo json_encode($data ? [
'gt' => CAPTCHA_ID,
'challenge' => $data['challenge'],
'success' => $data['success'] === 1,
'new_captcha' => true
] : ['success' => 0]);
exit;
}
// API2:校验
if ($path === '/validate' && $_SERVER['REQUEST_METHOD'] === 'POST') {
$req = json_decode(file_get_contents('php://input'), true);
$data = getJson("https://api.geetest.com/validate.php?" . http_build_query([
'seccode' => $req['geetest_seccode'] ?? '',
'challenge' => $req['geetest_challenge'] ?? '',
'gt' => CAPTCHA_ID,
'json_format' => 1
]));
echo json_encode(['success' => !empty($data['seccode'])]);
exit;
}
http_response_code(404);
echo json_encode(['error' => 'Not found']);
6. 接入客户端(Client SDK):
在客户端加载 gt.js,并调用 initGeetest,将服务器(API1)返回的参数传入。下面是一个使用 ajax 的示例:
ajax({
url: "https://example.com/register",
type: "get",
dataType: "json",
success: function (data) {
initGeetest({
gt: data.gt,
challenge: data.challenge,
offline: !data.success,
new_captcha: true
}, function (captchaObj) {
captchaObj.appendTo("#captcha");
captchaObj.onSuccess(function () {
const result = captchaObj.getValidate();
ajax({
url: "https://example.com/validate",
type: "post",
contentType: "application/json",
data: JSON.stringify(result),
success: function(res) {
if (res.success) alert('CAPTCHA passed');
else alert('CAPTCHA failed');
}
});
});
});
}
});
功能验证
请确认以下几点:
Failback(降级/本地模式)
如果 GeeTest 服务器不可用:
如果你接手了一个已经集成了验证码或其他防护系统的网站,但又无法访问其代码,也不用担心!要判断实际使用了哪种技术其实并不难。为了核实其是否正常工作,你可以在隔离的测试环境中使用CapMonster Cloud识别服务,确保令牌处理机制和校验逻辑都运行正常。
对于GeeTest CAPTCHA v3,只需识别出所用的系统,观察其行为,并确认防护是否正常工作即可。本文演示了如何识别 GeeTest CAPTCHA v3,以及到哪里查找其接入或重新配置的说明文档,从而帮助你自信地维护防护方案并掌控其运行情况。