GeeTest v3 sử dụng giao thức phản hồi thử thách nhiều bước. Không giống như reCAPTCHA nơi một mã thông báo duy nhất giải quyết mọi thứ, GeeTest bao gồm bước đăng ký, trao đổi mã thông báo thử thách và xác thực cuối cùng - mỗi mã tạo ra các thông số khác nhau. Hiểu quy trình này là điều cần thiết để tích hợp chính xác với CaptchaAI.
Giao thức hai pha
GeeTest v3 hoạt động theo hai giai đoạn:
Giai đoạn 1: Đăng ký (Phía máy chủ)
Phần phụ trợ của trang web liên hệ với GeeTest để đăng ký thử thách mới:
Site Backend → GeeTest Server: "Give me a challenge for this user"
GeeTest Server → Site Backend: { gt, challenge, new_captcha }
Site Backend → Browser: Passes gt and challenge to the page
Giai đoạn 2: Xác minh (Phía máy khách + Phía máy chủ)
Trình duyệt đưa ra thử thách, người dùng giải quyết nó và kết quả được xác minh:
Browser: Renders slider/puzzle using gt + challenge
User: Solves the challenge
Browser → Site Backend: { geetest_challenge, geetest_validate, geetest_seccode }
Site Backend → GeeTest Server: Verifies the three values
GeeTest Server → Site Backend: { result: "success" }
Luồng chi tiết
Bước 1: Cuộc gọi API đăng ký
Phần phụ trợ của trang web gọi điểm cuối đăng ký của GeeTest:
GET https://api.geetest.com/register.php?gt=GT_ID&json_format=1
Phản hồi:
{
"success": 1,
"gt": "81dc9bdb52d04dc20036dbd8313ed055",
"challenge": "a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6",
"new_captcha": true
}
| tham số | Ý nghĩa |
|---|---|
gt |
GeeTest ID - xác định tài khoản GeeTest của trang web |
challenge |
Mã thông báo thử thách duy nhất cho phiên này |
new_captcha |
Có nên sử dụng định dạng CAPTCHA mới hay không |
Quan trọng: Giá trị challenge chỉ sử dụng một lần và có giới hạn thời gian. Mỗi lần tải trang sẽ tạo ra một thử thách mới.
Bước 2: Kết xuất thử thách
Trình duyệt nhận gt và challenge và khởi chạy tiện ích GeeTest:
initGeetest({
gt: "81dc9bdb52d04dc20036dbd8313ed055",
challenge: "a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6",
offline: false,
new_captcha: true,
product: "float"
}, function(captchaObj) {
captchaObj.appendTo('#captcha-container');
captchaObj.onSuccess(function() {
var result = captchaObj.getValidate();
// result contains: geetest_challenge, geetest_validate, geetest_seccode
});
});
Bước 3: Các loại thử thách
GeeTest v3 hỗ trợ một số loại thử thách:
| loại | Hành động của người dùng | Mô tả |
|---|---|---|
| Thanh trượt | Kéo mảnh ghép | Di chuyển mảnh ghép để hoàn thành hình ảnh |
| Nhấp vào biểu tượng | Nhấn vào các biểu tượng theo thứ tự | Nhấp vào biểu tượng cụ thể theo trình tự hiển thị |
| Nhấp chuột từ | Bấm vào ký tự | Bấm vào ký tự tiếng Trung theo đúng thứ tự |
| Không gian | Nhấp vào/select | Thử thách lý luận không gian |
Loại thử thách được xác định bởi GeeTest dựa trên cấu hình của trang web và hồ sơ rủi ro của người dùng.
Bước 4: Giá trị giải pháp
Sau khi giải quyết, widget tạo ra ba giá trị:
{
"geetest_challenge": "a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6xy",
"geetest_validate": "abc123def456_validate",
"geetest_seccode": "abc123def456_validate|jordan"
}
| Giá trị | Mô tả |
|---|---|
geetest_challenge |
Mã thông báo thử thách đã sửa đổi (bản gốc + 2 ký tự bổ sung) |
geetest_validate |
Băm xác thực |
geetest_seccode |
Mã bảo mật (xác thực + \ | hậu tố jordan) |
Bước 5: Xác minh phía máy chủ
Phần phụ trợ của trang web sẽ gửi ba giá trị này tới GeeTest để xác minh:
POST https://api.geetest.com/validate.php
seccode=abc123def456_validate|jordan
&challenge=a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6xy
&sdk=geetest-python-3.0.0
GeeTest trả lời:
{
"seccode": "abc123def456_validate",
"validate": "abc123def456_validate"
}
Trích xuất tham số cho CaptchaAI
Để giải quyết bằng CaptchaAI, bạn cần gt và challenge từ trang:
Phương pháp 1: Chặn phản hồi đăng ký
from playwright.sync_api import sync_playwright
import json
with sync_playwright() as p:
browser = p.chromium.launch()
page = browser.new_page()
geetest_params = {}
def handle_response(response):
if "register" in response.url and "geetest" in response.url:
data = response.json()
geetest_params["gt"] = data.get("gt")
geetest_params["challenge"] = data.get("challenge")
page.on("response", handle_response)
page.goto("https://staging.example.com/qa-login")
# Wait for GeeTest to load
page.wait_for_selector(".geetest_holder")
print(f"gt: {geetest_params.get('gt')}")
print(f"challenge: {geetest_params.get('challenge')}")
Cách 2: Trích xuất từ trang JavaScript
gt = page.evaluate("() => document.querySelector('[data-gt]')?.dataset.gt")
challenge = page.evaluate("() => document.querySelector('[data-challenge]')?.dataset.challenge")
Cách 3: Từ cuộc gọi initGeetest
Tìm kiếm nguồn trang cho lệnh gọi initGeetest:
import re
source = page.content()
gt_match = re.search(r"gt['\"]?\s*[:=]\s*['\"]([a-f0-9]{32})['\"]", source)
challenge_match = re.search(r"challenge['\"]?\s*[:=]\s*['\"]([a-f0-9]{32})['\"]", source)
Giải quyết bằng CaptchaAI
Gửi các tham số được trích xuất:
POST https://ocr.captchaai.com/in.php
key=YOUR_API_KEY
&method=geetest
>=81dc9bdb52d04dc20036dbd8313ed055
&challenge=a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6
&pageurl=https://staging.example.com/qa-login
&json=1
Thăm dò kết quả:
GET https://ocr.captchaai.com/res.php?key=YOUR_API_KEY&action=get&id=TASK_ID&json=1
CaptchaAI trả về:
{
"status": 1,
"request": {
"geetest_challenge": "a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6xy",
"geetest_validate": "abc123def456_validate",
"geetest_seccode": "abc123def456_validate|jordan"
}
}
Bạn nhận được tất cả ba giá trị cần thiết cho bước xác minh của trang web.
Chế độ ngoại tuyến và trực tuyến
GeeTest v3 có chế độ dự phòng khi máy chủ GeeTest không thể truy cập được:
| Chế độ | Giá trị success |
Hành vi |
|---|---|---|
| Trực tuyến | 1 |
Phản hồi thử thách thông thường với máy chủ GeeTest |
| Ngoại tuyến | 0 |
Xác minh cục bộ đơn giản hóa |
Ở chế độ ngoại tuyến, thử thách được tạo cục bộ và việc xác minh đơn giản hơn. Hầu hết các trang web đều sử dụng chế độ trực tuyến.
Khắc phục sự cố
| Vấn đề | Nguyên nhân | Cách xử lý |
|---|---|---|
Giá trị challenge trống |
Đăng ký không thành công | Kiểm tra xem trang web có tải GeeTest chính xác không |
| Giải pháp bị từ chối | Thử thách đã hết hạn | Trích xuất challenge mới và giải quyết ngay |
Giá trị gt sai |
Nhiều phiên bản GeeTest trên trang | Trích xuất gt từ đúng tiện ích |
| Ba giá trị được trả về nhưng biểu mẫu không gửi được | Thiếu trường biểu mẫu | Đưa cả ba giá trị vào đúng đầu vào |
Câu hỏi thường gặp
Tại sao GeeTest cần cả gt và challenge?
gt xác định tài khoản GeeTest của trang web (liên tục). challenge là mã thông báo dành riêng cho phiên nhằm ngăn chặn các cuộc tấn công lặp lại — mỗi thử thách chỉ có thể được giải quyết một lần.
Tôi có thể sử dụng lại thử thách GeeTest không?
Không. Mỗi giá trị challenge chỉ được sử dụng một lần. Sau khi được giải quyết (hoặc hết hạn), bạn phải lấy một cái mới từ API đăng ký.
Thử thách GeeTest kéo dài bao lâu?
Các thử thách thường hết hạn trong vòng 1-2 phút. Giải quyết và nộp ngay sau khi trích xuất thông số.
bài viết liên quan
- Giải quyết Geetest V3 Nodejs
- Giải mã Geetest V3 Nodejs Captchaai
- Recaptcha Enterprise Assessment Api Deep Dive
Các bước tiếp theo
Giải quyết các thử thách GeeTest v3 —lấy khóa API CaptchaAI của bạnvà tích hợp phản hồi ba giá trị vào quy trình làm việc của bạn.