Loại tác vụ
reCAPTCHA v2
Trang này được dịch máy từ bản tiếng Trung và có thể có sai sót. Nội dung theo bản tiếng Trung.
Tác vụ reCAPTCHA v2 trả về một token (gRecaptchaResponse). Gửi token này cho trang web đích là qua được bước xác minh, không cần bấm chọn hình ảnh. Loại hay dùng nhất là NoCaptchaTaskProxyless, giá 15 điểm (≈ $2.25 / 1k) mỗi tác vụ, trả kết quả bất đồng bộ: gọi createTask để tạo tác vụ, sau đó cứ 5 giây gọi getTaskResult một lần để lấy kết quả. Tác vụ nhận dạng thất bại hoặc hết thời gian sẽ tự động hoàn điểm.
https://api.yescaptcha.com/createTaskEndpoint quốc tếhttps://cn.yescaptcha.com/createTaskEndpoint Trung QuốcNội dung yêu cầu là JSON, xác thực bằng clientKey (sao chép trong bảng điều khiển tại yescaptcha.com). Tạo tác vụ ở endpoint nào thì truy vấn kết quả ở endpoint đó.
Trường hợp sử dụng
Phần tiêu đề “Trường hợp sử dụng”- Trang web có ô đánh dấu “Tôi không phải là người máy” (I’m not a robot): bản thường.
- Không có ô đánh dấu, chỉ sau khi bấm nút gửi mới hiện câu hỏi hình ảnh: bản ẩn, thêm
"isInvisible": true. - Trang tải
recaptcha/enterprise.js, hoặc địa chỉ yêu cầu có chứaenterprise: bản Enterprise, dùng loại cóEnterprisetrong tên.
Nếu không chắc là loại nào, xem Xác định loại captcha. Nếu token có tỷ lệ qua chưa như ý, có thể chuyển sang nhận dạng hình ảnh reCAPTCHA v2: API cho biết cần bấm vào những ảnh nào, bạn tự bấm trong trình duyệt.
Loại tác vụ và giá
Phần tiêu đề “Loại tác vụ và giá”| Loại tác vụ | Giá | Cách trả kết quả | Ghi chú |
|---|---|---|---|
NoCaptchaTaskProxyless | $2.25 / 1k; 15 điểm/tác vụ · ¥15 / 1k | Bất đồng bộ | |
RecaptchaV2TaskProxyless | $3.00 / 1k; 20 điểm/tác vụ · ¥20 / 1k | Bất đồng bộ | Cùng tham số với NoCaptchaTaskProxyless nhưng đi qua tuyến khác; có thể dùng cái này làm dự phòng cho cái kia |
NoCaptchaTask | $2.25 / 1k; 15 điểm/tác vụ · ¥15 / 1k | Bất đồng bộ | Dùng proxy riêng |
RecaptchaV2EnterpriseTaskProxyless | $3.00 / 1k; 20 điểm/tác vụ · ¥20 / 1k | Bất đồng bộ | |
RecaptchaV2EnterpriseTask | $3.00 / 1k; 20 điểm/tác vụ · ¥20 / 1k | Bất đồng bộ | Dùng proxy riêng |
Giá bằng đô la Mỹ chỉ là ước tính theo US$1 ≈ ¥6.67; tác vụ được trừ điểm.
NoCaptchaTaskProxylessvàRecaptchaV2TaskProxylesscó tham số giống nhau nhưng đi tuyến khác nhau. Nếu một loại có tỷ lệ qua chưa như ý, hãy thử loại còn lại.- Các loại không có
Proxylesstrong tên (NoCaptchaTask,RecaptchaV2EnterpriseTask) tải captcha qua proxy của bạn, cần truyền các trườngproxyType,proxyAddress,proxyPort, v.v. Dùng chúng khi trang web đích có yêu cầu về IP truy cập.
Tham số yêu cầu
Phần tiêu đề “Tham số yêu cầu”Đối tượng task của createTask:
| Trường | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
type | string | Có | Loại tác vụ; xem "Loại tác vụ và giá" trên trang này |
websiteURL | string | Có | URL đầy đủ của trang hiển thị captcha. Điền trang web nơi bạn thấy captcha, không điền tên miền của nhà cung cấp captcha |
websiteKey | string | Có | Khóa trang web (sitekey), tìm trong mã nguồn trang hoặc trong các request mạng; thường không thay đổi |
isInvisible | boolean | Không | Đặt là true cho phiên bản ẩn (invisible); nếu không thì bỏ qua |
proxyType | string | Một số loại | Giao thức proxy: http, https, socks4 hoặc socks5 (Bắt buộc với NoCaptchaTask, RecaptchaV2EnterpriseTask) |
proxyAddress | string | Một số loại | Địa chỉ IP hoặc tên máy chủ của proxy. Địa chỉ cục bộ hoặc nội bộ như 127.0.0.1 hay 192.168.x.x sẽ không hoạt động vì máy chủ của chúng tôi không truy cập được (Bắt buộc với NoCaptchaTask, RecaptchaV2EnterpriseTask) |
proxyPort | integer | Một số loại | Cổng proxy (Bắt buộc với NoCaptchaTask, RecaptchaV2EnterpriseTask) |
proxyLogin | string | Không | Tên người dùng proxy, nếu proxy yêu cầu xác thực (chỉ NoCaptchaTask, RecaptchaV2EnterpriseTask) |
proxyPassword | string | Không | Mật khẩu proxy, nếu proxy yêu cầu xác thực (chỉ NoCaptchaTask, RecaptchaV2EnterpriseTask) |
userAgent | string | Không | User-Agent của trình duyệt. Nếu kết quả có userAgent, hãy dùng giá trị đó khi gửi token (chỉ NoCaptchaTask, RecaptchaV2EnterpriseTask) |
enterprisePayload | object | Không | Tham số bổ sung của phiên bản enterprise, ví dụ giá trị s của reCAPTCHA Enterprise: {"s": "..."}. Bỏ qua nếu trang không dùng (chỉ RecaptchaV2EnterpriseTaskProxyless, RecaptchaV2EnterpriseTask) |
Cách tìm websiteURL và websiteKey: xem Tìm tham số reCAPTCHA.
Ví dụ yêu cầu
Phần tiêu đề “Ví dụ yêu cầu”Lấy trang demo chính thức của Google làm ví dụ:
{ "clientKey": "YOUR_CLIENT_KEY", "task": { "type": "NoCaptchaTaskProxyless", "websiteURL": "https://www.google.com/recaptcha/api2/demo", "websiteKey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-" }}Mã đầy đủ (tạo tác vụ, cứ 5 giây truy vấn một lần, in token). Trước khi chạy, hãy đặt clientKey vào biến môi trường YESCAPTCHA_CLIENT_KEY:
curl -s https://api.yescaptcha.com/createTask \ -H 'Content-Type: application/json' \ -d '{ "clientKey": "YOUR_CLIENT_KEY", "task": { "type": "NoCaptchaTaskProxyless", "websiteURL": "https://www.google.com/recaptcha/api2/demo", "websiteKey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-" }}'
# Returns {"errorId":0,"taskId":"..."}; then poll every 5 seconds:curl -s https://api.yescaptcha.com/getTaskResult \ -H 'Content-Type: application/json' \ -d '{"clientKey": "YOUR_CLIENT_KEY", "taskId": "TASK_ID"}'import osimport time
import requests
API = "https://api.yescaptcha.com"CLIENT_KEY = os.environ["YESCAPTCHA_CLIENT_KEY"] # Read the clientKey from an environment variable
def call(method, payload): r = requests.post(f"{API}/{method}", json={"clientKey": CLIENT_KEY, **payload}, timeout=30) data = r.json() if data.get("errorId"): raise RuntimeError(f"{data.get('errorCode')}: {data.get('errorDescription')}") return data
def solve(task): task_id = call("createTask", {"task": task})["taskId"] for _ in range(36): # Poll every 5 seconds, for up to about 3 minutes time.sleep(5) result = call("getTaskResult", {"taskId": task_id}) if result.get("status") == "ready": return result["solution"] raise TimeoutError(task_id)
solution = solve({ "type": "NoCaptchaTaskProxyless", "websiteURL": "https://www.google.com/recaptcha/api2/demo", "websiteKey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-",})print(solution["gRecaptchaResponse"])const API = 'https://api.yescaptcha.com';const CLIENT_KEY = process.env.YESCAPTCHA_CLIENT_KEY; // Read the clientKey from an environment variable
async function call(method, payload) { const res = await fetch(`${API}/${method}`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ clientKey: CLIENT_KEY, ...payload }), }); const data = await res.json(); if (data.errorId) throw new Error(`${data.errorCode}: ${data.errorDescription}`); return data;}
async function solve(task) { const { taskId } = await call('createTask', { task }); for (let i = 0; i < 36; i++) { // Poll every 5 seconds, for up to about 3 minutes await new Promise((r) => setTimeout(r, 5000)); const result = await call('getTaskResult', { taskId }); if (result.status === 'ready') return result.solution; } throw new Error(`timeout: ${taskId}`);}
const solution = await solve({ type: "NoCaptchaTaskProxyless", websiteURL: "https://www.google.com/recaptcha/api2/demo", websiteKey: "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-",});console.log(solution.gRecaptchaResponse);Với bản Enterprise, nếu trang web truyền giá trị s cho reCAPTCHA, hãy đặt giá trị đó vào enterprisePayload:
{ "clientKey": "YOUR_CLIENT_KEY", "task": { "type": "RecaptchaV2EnterpriseTaskProxyless", "websiteURL": "https://example.com/login", "websiteKey": "SITE_KEY_OF_THE_PAGE", "enterprisePayload": { "s": "S_VALUE_FROM_THE_PAGE" } }}Dùng proxy của bạn:
{ "clientKey": "YOUR_CLIENT_KEY", "task": { "type": "NoCaptchaTask", "websiteURL": "https://www.google.com/recaptcha/api2/demo", "websiteKey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-", "proxyType": "http", "proxyAddress": "proxy.example.com", "proxyPort": 8080, "proxyLogin": "user", "proxyPassword": "pass" }}Kết quả trả về
Phần tiêu đề “Kết quả trả về”createTask trả về ID tác vụ:
{ "errorId": 0, "taskId": "61138bb6-19fb-11ec-a9c8-0242ac110006"}Dùng ID này để gọi getTaskResult. Khi tác vụ còn đang xử lý sẽ trả về {"errorId": 0, "status": "processing"}, hãy truy vấn lại sau 5 giây; khi hoàn thành sẽ trả về:
{ "errorId": 0, "status": "ready", "solution": { "gRecaptchaResponse": "03AGdBq25SxXT-pmSeBXjzScW-EiocHwwpwqtk1QXlJnGnU..." }}| Trường | Kiểu | Mô tả |
|---|---|---|
gRecaptchaResponse | string | Token cần gửi cho website đích. Chỉ dùng một lần, có hiệu lực khoảng 120 giây; nên dùng trong vòng 60 giây |
Một tác vụ được xử lý tối đa khoảng 110 giây, quá thời gian sẽ trả về ERROR_TASK_TIMEOUT và hoàn điểm. Khi có lỗi, errorId bằng 1, hãy xử lý theo errorCode, xem Mã lỗi. Cách gửi token sau khi nhận được: xem Dùng token để hoàn thành reCAPTCHA.
Câu hỏi thường gặp
Phần tiêu đề “Câu hỏi thường gặp”Tại sao token của cùng một trang web lúc qua lúc không?
Phần tiêu đề “Tại sao token của cùng một trang web lúc qua lúc không?”Việc có qua hay không do trang web đích quyết định. Trang web chấm điểm từng lần xác minh và đặt ngưỡng, ngưỡng này có thể thay đổi bất cứ lúc nào, nên tỷ lệ qua khác nhau tùy trang web và không phải token nào cũng qua. Bạn có thể đổi sang loại tác vụ cùng nhóm để so sánh tỷ lệ qua, hoặc chuyển sang nhận dạng hình ảnh.
Token có hiệu lực trong bao lâu?
Phần tiêu đề “Token có hiệu lực trong bao lâu?”Dùng được một lần, có hiệu lực khoảng 120 giây, nên gửi trong vòng 60 giây sau khi nhận. Thời hạn do Google quyết định.
Nhận dạng thất bại có bị trừ điểm không?
Phần tiêu đề “Nhận dạng thất bại có bị trừ điểm không?”Không. Tác vụ trả về ERROR_CAPTCHA_UNSOLVABLE hoặc hết thời gian sẽ tự động hoàn điểm, xem Tính phí và hoàn điểm.