Перейти к основному содержимому
Возникают проблемы с получением токена?
Свяжитесь с поддержкой

Alibaba Cloud Captcha

Примеры заданий

Ниже представлены примеры типов заданий Alibaba Captcha, которые на данный момент поддерживаются сервисом CapMonster Cloud:

Slider CAPTCHA
Puzzle CAPTCHA
Image restoration CAPTCHA
Внимание!

CapMonster Cloud по умолчанию работает через встроенные прокси — они уже включены в стоимость. Указывать собственные прокси требуется только в тех случаях, когда сайт не принимает токен или доступ к встроенным сервисам ограничен.

Если прокси с авторизацией по IP, то необходимо добавить адрес 65.21.190.34 в белый список.

Параметры запроса

type<string>required

CustomTask


class<string>required

alibaba


websiteURL<string>required

Полный URL страницы с капчей.


sceneId (внутри metadata)<string>required

Идентификатор сценария капчи, передаётся в следующем формате: "sceneId":"1ww7426c4" (как найти значение этого параметра, см. в соответствующем разделе)


prefix (внутри metadata)<string>required

Параметр инициализации капчи, передаётся в URL запроса, используемого для загрузки текста задания на странице.
Например, если URL имеет вид: https://dlw3kug.captcha-open.example.aliyuncs.com/, то значение параметра prefix соответствует поддомену — dlw3kug.


Для некоторых сайтов требуется передавать дополнительные параметры:

Указывайте данные параметры только при их наличии на сайте (см. подробнее в разделе Работа с сайтами, содержащими расширенные параметры).

userId (внутри metadata)<string>optional

Уникальный идентификатор пользователя или сессии на стороне сайта.


userUserId (внутри metadata)<string>optional

Дополнительный (вторичный) идентификатор пользователя.


verifyType (внутри metadata)<string>optional

Версия или тип механизма проверки капчи.


region (внутри metadata)<string>optional

Регион сервера или дата-центра, через который обрабатывается капча.


UserCertifyId (внутри metadata)<string>optional

Уникальный ID проверки, связанный с текущей сессией капчи.


apiGetLib (внутри metadata)<string>optional

Ссылка на JS-библиотеку капчи, используемую сайтом. Значение формируется на стороне клиента и может генерироваться динамически при каждом рендеринге страницы.

userAgent<string>optional

User-Agent браузера.
Передавайте только актуальный UA от ОС Windows. Сейчас таковым является: userAgentPlaceholder


proxyType<string>optional

http - обычный http/https прокси;
https - попробуйте эту опцию, только если "http" не работает (требуется для некоторых кастомных прокси);
socks4 - socks4 прокси;
socks5 - socks5 прокси.


proxyAddress<string>optional

IP адрес прокси IPv4/IPv6. Не допускается:

  • использование прозрачных прокси (там где можно видеть IP клиента);
  • использование прокси на локальных машинах.


proxyPort<integer>optional

Порт прокси.


proxyLogin<string>optional

Логин прокси-сервера.


proxyPassword<string>optional

Пароль прокси-сервера.


Метод создания задачи

Обычный вариант (без дополнительных параметров)

POST
https://api.capmonster.cloud/createTask

Запрос

{
"clientKey": "API_KEY",
"task": {
"type": "CustomTask",
"class": "alibaba",
"websiteURL": "https://www.example.com",
"userAgent": "userAgentPlaceholder",
"metadata": {
"sceneId": "1ww7426c4",
"prefix": "dlw3kug"
}
}
}

Ответ

{
"errorId": 0,
"taskId": 407533077
}

Вариант с расширенными параметрами (userId, userUserId, verifyType и др.):

POST
https://api.capmonster.cloud/createTask

Запрос

{
"clientKey": "API_KEY",
"task": {
"type": "CustomTask",
"class": "alibaba",
"websiteURL": "https://www.example.com",
"userAgent": "userAgentPlaceholder",
"metadata": {
"sceneId": "1ww7426c4",
"prefix": "dlw3kug",
"userId": "HpadJlQnz2zSKcSmjXBaqQvjYUvP4jMJIk/ZwGNDNiM=",
"userUserId": "/uSXKkVFuuwxXA21/MpXGxpLStWBEup1B3jjlMUWwNE=",
"verifyType": "1.0",
"region": "sgp",
"UserCertifyId": "0a03e59417757735511105780e2a5e",
"apiGetLib": "https://o.example.com/captcha-frontend/aliyunCaptcha/AliyunCaptcha.js?t=2041"
}
}
}

Ответ

{
"errorId": 0,
"taskId": 407533077
}

Метод получения результата задачи

Используйте метод getTaskResult, чтобы получить решение Alibaba капчи.

POST
https://api.capmonster.cloud/getTaskResult

Запрос

{
"clientKey": "API_KEY",
"taskId": 407533077
}

Ответ

{
"errorId": 0,
"errorCode": null,
"errorDescription": null,
"status": "ready",
"solution": {
"data": {
"tokens": "{\"sceneId\":\"1ww7426c4\",\"certifyId\":\"kBjCxX2W2c\",\"deviceToken\":\"U0dfV0VCIzM3...wOGJkMjY=\",\"data\":\"JRMnX3B...EUQdCpLkqSj7THYNf3dn\"}"
}
}
}

Как найти все нужные параметры для создания задачи

sceneId

Можно получить после одного успешного прохождения капчи:

  1. Пройдите капчу вручную на сайте.
  2. Откройте DevTools → вкладка Network.
  3. Найдите запрос, отправляемый после успешного решения (например: verify, check, validate).
  4. В Payload или Response найдите параметр sceneId (CaptchaSceneId или sId).

Также данный параметр можно найти с помощью поиска по сетевым запросам:

  1. Откройте страницу с капчей, перейдите в DevTools → вкладка Network.
  2. Выполните поиск (Ctrl + F) по ключу sceneIdили CaptchaSceneId.

prefix

Можно получить из URL запроса, который используется на сайте для передачи текста задания капчи:

  1. Откройте страницу с капчей.
  2. Найдите запрос, связанный с загрузкой задания (обычно через DevToolsNetwork).


Работа с сайтами, содержащими расширенные параметры

Извлечение и подготовка параметров капчи

Данный раздел описывает общий процесс извлечения необходимых параметров, решения капчи и повторного выполнения авторизации на целевом сайте.

  1. Первоначальный запрос на авторизацию:
POST https://example.com/api/v2/auths/signin

Отправляются данные пользователя:

{
"email": "[email protected]",
"password": "hashed_password"
}

Примеры заголовков см. в разделе Примеры автоматического решения капчи.

  1. Определение ответа сервера. Сервер может вернуть два типа ответа:
  • 2.1 Обычный JSON (капчи нет):
{
"success": false,
"data": {
"code": "Bad_Request",
"details": "The email or password provided is incorrect..."
}
}

Это означает, что капча не требуется и запрос обработан стандартно.

  • 2.2 Ответ с капчей (сервер возвращает HTML страницу вместо JSON):
<!doctype html>
<meta charset="UTF-8">
<meta name="aliyun_waf_aa" content="...">
<meta name="aliyun_waf_bb" content="...">
...
  1. Внутри страницы находится объект со следующими данными:
var requestInfo = {
data,
region,
sceneId,
token,
traceid,
type,
userId,
userUserId
}

Из объекта необходимо извлечь следующие параметры, используемые для решения капчи:

  • userId
  • userUserId
  • verifyType (соответствует type)
  • region
  • UserCertifyId (соответствует traceid)

Важно: дополнительно необходимо сохранить значения авторизационных параметров token и traceid. Они используются в последующих запросах авторизации как u_atoken и u_asig соответственно.


  1. Пример формирования ссылки на JS капчи:
this.currentDate = new Date()

this.AliyunGeneratedDynamicJS =
`https://o.example.com/captcha-frontend/aliyunCaptcha/AliyunCaptcha.js?t=${
this.currentDate.getFullYear() +
(this.currentDate.getMonth() + 1) +
this.currentDate.getDate() +
this.currentDate.getHours()
}`
  1. Формирование metadata и запроса для решения капчи.

Эти данные передаются в наш сервис для решения капчи:

{
"metadata": {
"sceneId": "1ww7426c4",
"prefix": "dlw3kug",
"userId": "HpadJlQnz2zSKcSmjXBaqQvjYUvP4jMJIk/ZwGNDNiM=",
"userUserId": "/uSXKkVFuuwxXA21/MpXGxpLStWBEup1B3jjlMUWwNE=",
"verifyType": "1.0",
"region": "sgp",
"UserCertifyId": "0a03e59417757735511105780e2a5e",
"apiGetLib": "https://o.example.com/captcha-frontend/aliyunCaptcha/AliyunCaptcha.js?t=2041"
}
}
}
  1. Получение решения капчи и повторная отправка запроса на авторизацию с ранее сохранёнными параметрами u_atoken и u_asig:
POST https://example.com/api/v2/auths/signin?u_atoken=...&u_asig=...&u_aref=undefined

В случае успешного выполнения капчи сервер возвращает результат авторизации (см. пункт 2.1).


Примеры автоматического решения капчи

Важно

Примеры носят демонстрационный характер и показывают общую логику работы с вашим сайтом, использующим защиту Alibaba Cloud Captcha. В реальных проектах код может потребовать адаптации под конкретный сайт, его запросы и заголовки.

Важные данные (API‑ключи, настройки прокси и т.п.) рекомендуется хранить в .env или переменных окружения.

Показать код (Node.js)
import "dotenv/config";
import fs from "fs";

import { gotScraping } from "got-scraping";

function parse(text, start, end, isJson = true) {
const startIndex = text.indexOf(start);
if (startIndex === -1) return null;

const contentStart = startIndex + start.length;
const endIndex = text.indexOf(end, contentStart);
if (endIndex === -1) return null;

let extracted = text.substring(contentStart, endIndex).trim();

extracted = extracted.replace(/\n/g, "").trim();

let jsonStr = extracted
.replace(/(['"])?([a-zA-Z0-9_]+)(['"])?:/g, '"$2":')
.replace(/'/g, '"');

try {
return isJson ? JSON.parse(jsonStr) : jsonStr;
} catch (err) {
console.error("Не удалось распарсить JSON:", err.message);
console.error("Попытка распарсить:", jsonStr);
return null;
}
}

function buildProxyLine(proxyUrl) {
if (!proxyUrl) return undefined;

const parts = proxyUrl.split(":");

// Обработка формата protocol:ip:port (3 части)
if (parts.length === 3) {
const [protocol, ip, port] = parts;
return { proxyLine: `${protocol}://${ip}:${port}`, protocol, ip, port };
}

// Обработка формата protocol:username:password:ip:port (5 частей)
if (parts.length === 5) {
const [protocol, username, password, ip, port] = parts;
return {
proxyLine: `${protocol}://${username}:${password}@${ip}:${port}`,
protocol,
ip,
port,
username,
password,
};
}

// Некорректный формат
return undefined;
}

const proxyUrl =
process.env.proxyUrl || "http:username:password:127.0.0.1:9029"; // Замените на параметры вашего прокси или задайте в .env файле
const proxyLine = buildProxyLine(proxyUrl);
const delay = (ms) => new Promise((res) => setTimeout(res, ms));

class Worker {
constructor() {
this.providerVendorSolverUrl = "https://api.capmonster.cloud";
this.API_KEY = process.env.apiKey || "YOUR_API_KEY"; // Замените на ваш API ключ CapMonster Cloud

this.currentDate = new Date();
// Здесь формируется динамическая ссылка на JS капчи
this.AliyunGeneratedDynamicJS = `https://o.example.com/captcha-frontend/aliyunCaptcha/AliyunCaptcha.js?t=${this.currentDate.getFullYear() + (this.currentDate.getMonth() + 1) + this.currentDate.getDate() + this.currentDate.getHours()}`;

this.websiteUrl = "https://example.com/auth"; // Замените на URL страницы с капчей
this.userAgent =
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36";
}

async executor() {
console.log(`Получение параметров капчи....`);
const RequireAuthorizationResponses =
await this.getAuthorizationResponses();
console.log("Успешно получены страницы с капчей");
const requireParamsCaptchas = await this.requireParamsCaptchasData(
RequireAuthorizationResponses,
);
console.log(`Параметры капчи: `, requireParamsCaptchas);
const AlibabaSolvedResult = await this.requireAlibabaSolverResponse(
requireParamsCaptchas,
);
console.log(
`Результат решения капчи: `,
AlibabaSolvedResult?.solution?.data?.tokens,
);
const RequireAuthorizationResponsesAfterCaptchaBypass =
await this.sendAuthrozationsRequest();
console.log(RequireAuthorizationResponsesAfterCaptchaBypass);
}

async sendAuthrozationsRequest() {
const response = await gotScraping.post(
`https://example.com/api/v2/auths/signin?u_atoken=${this.AuthorizationParams.u_atoken}&u_asig=${this.AuthorizationParams.u_asig}&u_aref=undefined`,
{
body: JSON.stringify({
email: "[email protected]",
password:
"e2577eeb61dc2197dfe94816d731f2941ccd0b66de8dc97aacb377bfe8476970",
}),
headers: {
Accept: "application/json, text/plain, */*",
"Accept-Encoding": "gzip, deflate, br, zstd",
"Accept-Language": "en-US,en;q=0.9",
"Content-Type": "application/json",
Origin: "https://example.com",
Pragma: "no-cache",
Referer: "https://example.com/auth",
Timezone: "Thu Apr 09 2026 23:29:23 GMT+0300",
"User-Agent":
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36",
Version: "0.2.36",
"X-Request-Id": "2b4a7a52-d273-4049-a826-156aae856fe5",
"bx-v": "2.5.36",
"sec-ch-ua":
'"Chromium";v="146", "Not-A.Brand";v="24", "Google Chrome";v="146"',
"sec-ch-ua-mobile": "?0",
"sec-ch-ua-platform": '"Windows"',
source: "web",
},
},
);

return response.body;
}

async getAuthorizationResponses() {
const response = await gotScraping.post(
`https://example.com/api/v2/auths/signin`, // Замените на актуальный URL для авторизации на сайте, который вызывает капчу
{
body: JSON.stringify({
email: "[email protected]",
password:
"e2577eeb61dc2197dfe94816d731f2941ccd0b66de8dc97aacb377bfe8476970",
}),
headers: {
Accept: "application/json, text/plain, */*",
"Accept-Encoding": "gzip, deflate, br, zstd",
"Accept-Language": "en-US,en;q=0.9",
"Content-Type": "application/json",
Origin: "https://example.com", // Замените на актуальный Origin сайта
Pragma: "no-cache",
Referer: "https://example.com/auth", // Замените на актуальный Referer сайта
Timezone: "Thu Apr 09 2026 23:29:23 GMT+0300",
"User-Agent":
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36",
Version: "0.2.36",
"X-Request-Id": "2b4a7a52-d273-4049-a826-156aae856fe5",
"bx-v": "2.5.36",
"sec-ch-ua":
'"Chromium";v="146", "Not-A.Brand";v="24", "Google Chrome";v="146"',
"sec-ch-ua-mobile": "?0",
"sec-ch-ua-platform": '"Windows"',
source: "web",
},
},
);

if (response.body.includes("requestInfo")) {
console.log("Ответ с капчей успешно получен:");
fs.writeFileSync("./baseResponse.txt", response.body);
console.log(response.body.substring(0, 150));
return response.body;
}
console.log(response.body);
return await this.getAuthorizationResponses();
}

async requireAlibabaSolverResponse(captchaMetadataParams) {
let cmReqData = {
type: "CustomTask",
class: "alibaba",
websiteURL: this.websiteUrl,
websiteKey: "customTask",
userAgent: this.userAgent,
};
if (captchaMetadataParams) {
cmReqData.metadata = captchaMetadataParams;
}
const response = await gotScraping.post(
`${this.providerVendorSolverUrl}/createTask`,
{
body: JSON.stringify({ clientKey: this.API_KEY, task: cmReqData }),
headers: {
"Content-Type": "application/json",
},
},
);
let JSON_responseData = JSON.parse(response.body);
if (JSON_responseData.errorId) throw new Error("JSON.TaskId.error");
let taskId = JSON_responseData.taskId;
let responseData;

while (true) {
let cmTaskRes = { clientKey: this.API_KEY, taskId: taskId };
let task_response = await gotScraping.post(
`${this.providerVendorSolverUrl}/getTaskResult`,
{
body: JSON.stringify(cmTaskRes),
headers: {
"Content-Type": "application/json",
},
},
);
let JSON_responseDataTaskResponse = JSON.parse(task_response.body);
if (JSON_responseDataTaskResponse.status !== "processing") {
responseData = JSON_responseDataTaskResponse;
break;
}
await delay(5000);
}
return responseData;
}

async requireParamsCaptchasData(responsesCaptchaPage) {
const JsonData = parse(
responsesCaptchaPage,
':none">var requestInfo = ',
";",
true,
);
// Сохраните авторизационные параметры для последующего использования при повторной отправке запроса на авторизацию
this.AuthorizationParams = {
u_atoken: JsonData.token,
u_asig: JsonData.traceid,
};
return {
prefix: "57d98d02303c01e7d2f7814c75224396",
sceneId: JsonData.sceneId,
userId: JsonData.userId,
userUserId: JsonData.userUserId,
verifyType: "1.0",
region: JsonData.region,
UserCertifyId: JsonData.traceid,
apiGetLib: this.AliyunGeneratedDynamicJS,
};
}
}

new Worker().executor();