Hunt

Hunt-капча — это антибот-система, используемая на букмекерских платформах для выявления автоматизированной активности. Она отслеживает поведение пользователя и при обнаружении подозрительных действий инициирует интерактивную проверку.
-
Для выполнения данной задачи используйте ваши собственные прокси.
-
Наша система решения имеет два режима работы: генерация X-HD (fingerprint) и решение капчи. Если вы хотите только сгенерировать X-HD, не передавайте параметр
data. Если вам нужно решить капчу, передайте вdataтокен, который целевой сайт выдаёт при определённых действиях (например, при запросе SMS).
Параметры запроса
type<string>requiredCustomTask
class<string>requiredHUNT
websiteURL<string>requiredАдрес страницы, на которой находится капча Hunt.
apiGetLib (внутри metadata)<string>requiredПолная ссылка на файл api.js.
Пример:
https://www.example.com/hd-api/external/apps/<hash>/api.js
Передавайте в формате:
"apiGetLib":"https://example.com/hd-api/external/apps/a2157wab1045d68672a63557e0n2a77edbfd15ea/api.js"
Найти ссылку можно в DevTools (вкладки Network или Elements) на странице с Hunt-капчей.
Используйте поиск по ключевым словам: hd-api или api.js.
data<string>optionalУказание data необходимо при выборе режима решения капчи (см. подробнее ниже)
userAgent<string>optionalUser-Agent браузера.
Передавайте только актуальный UA от ОС Windows. Сейчас таковым является: userAgentPlaceholder
proxyType<string>requiredhttp - обычный http/https прокси;
https - попробуйте эту опцию только если "http" не работает (требуется для некоторых кастомных прокси);
socks4 - socks4 прокси;
socks5 - socks5 прокси.
proxyAddress<string>requiredIP адрес прокси IPv4/IPv6. Не допускается:
- использование прозрачных прокси (там где можно видеть IP клиента);
- использование прокси на локальных машинах.
proxyPort<integer>requiredПорт прокси.
proxyLogin<string>requiredЛогин прокси-сервера.
proxyPassword<string>requiredПароль прокси-сервера.
Решение поддерживает два режима работы:
-
Генерация X-HD (fingerprint)
- В этом режиме вы не передаёте
data. - После создания задачи вы получите X-HD — уникальный отпечаток, привязанный к вашему IP, который можно использовать для последующих запросов к сайту.
- В этом режиме вы не передаёте
-
Решение капчи
- В этом режиме в параметре
dataвы передаёте токен (значениеmeta.token), который сайт выдаёт при определённых действиях (например, при запросе SMS). - После создания задачи вы получите решение капчи в виде токена, готового для использования на сайте.
- В этом режиме в параметре
Когда использовать каждый режим:
| Ситуация | Нужно ли передавать data? |
|---|---|
| Первичная инициализация | Нет |
| Нужно получить X-HD | Нет |
| Сайт вернул Captcha error | Да |
Получен meta.token | Да |
Пример полного сценария работы:
- Создать задачу без
data - Получить от нашего сервиса X-HD
- Отправить запрос на сайт с X-HD
- Получить
meta.token - Создать задачу с
data = meta.token - Получить решение
- Передать решение на сайт
При смене прокси необходимо повторно получать X-HD.
Режим 1. Генерация X-HD.
Используется для получения X-HD токена, привязанного к IP.
Метод создания задачи для генерации X-HD
https://api.capmonster.cloud/createTask
Запрос
{
"type": "CustomTask",
"class": "HUNT",
"websiteURL": "https://example.com",
"metadata": {
"apiGetLib": "https://example.com/hd-api/external/apps/a2157wab1045d68672a63557e0n2a77edbfd15ea/api.js"
},
"userAgent": "userAgentPlaceholder",
"proxyType": "http",
"proxyAddress": "8.8.8.8",
"proxyPort": 8080,
"proxyLogin": "proxyLoginHere",
"proxyPassword": "proxyPasswordHere"
}
}
Ответ
{
"errorId": 0,
"taskId": 407533072
}
Режим 2. Решение капчи.
Используется после того, как сайт вернул ошибку captcha и выдал meta.token.
Как получить meta.token
- Делаете запрос к сайту (например, запрос SMS)
- Получаете X-HD
-1-feced69f9da880f442fb82a0d025775d.png)
- Сайт возвращает:
{
"errors":[{"code":"113","title":"Captcha error"}],
"meta":{
"token":"SITE_META_TOKEN"
}
}
-cb52653b917e55094fa4dbc891cd1746.png)
Метод создания задачи для решения капчи
Значение meta.token нужно передать в data.
https://api.capmonster.cloud/createTask
Запрос
{
"type": "CustomTask",
"class": "HUNT",
"websiteUrl": "https://example.com",
"metadata": {
"apiGetLib": "https://example.com/hd-api/external/apps/a2157wab1045d68672a63557e0n2a77edbfd15ea/api.js"
},
"data": "kufyHK/s/jTNU...AfwIW", // значение META_TOKEN
"userAgent": "userAgentPlaceholder",
"proxyType": "http",
"proxyAddress": "8.8.8.8",
"proxyPort": 8080,
"proxyLogin": "proxyLoginHere",
"proxyPassword": "proxyPasswordHere"
}
Ответ
{
"errorId": 0,
"taskId": 407533072
}
Метод получения результата задачи
Используйте метод getTaskResult, чтобы получить fingerprint X-HD или решение Hunt капчи.
Значение solution.token:
-
В режиме генерации X-HD — это X-HD токен, который нужно использовать в запросах к целевому сайту.
-
В режиме решения капчи
solution.token— это токен решения, который необходимо передать обратно на сайт для подтверждения действия.
https://api.capmonster.cloud/getTaskResult
Запрос
{
"clientKey":"API_KEY",
"taskId": 407533072
}
Ответ
{
"errorId": 0,
"status": "ready",
"solution": {
"data": {
"token": "6IyDCCpDdSK...YGs1Wug/z/kLNSpjewI="
}
}
}
Пример решения Hunt CAPTCHA
Ниже приведён пример на Node.js, который демонстрирует, как создать задачу Hunt CAPTCHA в CapMonster Cloud, дождаться её решения и получить X-HD токен. В коде показано:
- Как создать HUNT‑задачу с указанием сайта и прокси
- Как ждать готовности решения через API CapMonster
- Как получить результат и извлечь токен для дальнейшего использования на сайте
Важно: Не забудьте заменить
API_KEY,proxyLogin,proxyPasswordи другие параметры на свои реальные значения перед запуском. Рекомендуем хранить все чувствительные данные в файле.env.
Показать код (Node.js)
const API_KEY = "YOUR_API_KEY"; // Замените на ваш API-ключ CapMonster Cloud
const CREATE_TASK_URL = "https://api.capmonster.cloud/createTask";
const GET_RESULT_URL = "https://api.capmonster.cloud/getTaskResult";
const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
async function createHuntTask({ data = null } = {}) {
const payload = {
clientKey: API_KEY,
task: {
type: "CustomTask",
class: "HUNT",
websiteURL: "https://example.com/",
userAgent:
"userAgentPlaceholder",
metadata: {
apiGetLib:
"https://example.com/hd-api/external/apps/a2157wab1045d68672a63557e0n2a77edbfd15ea/api.js",
},
proxyType: "http",
proxyAddress: "123.45.67.89",
proxyPort: 8080,
proxyLogin: "proxyLogin",
proxyPassword: "proxyPassword",
},
};
if (data) {
payload.task.data = data;
}
const response = await fetch(CREATE_TASK_URL, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(payload),
});
const result = await response.json();
return result.taskId;
}
async function waitForResult(taskId) {
while (true) {
await sleep(3000);
const response = await fetch(GET_RESULT_URL, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
clientKey: API_KEY,
taskId: taskId,
}),
});
const result = await response.json();
if (result.errorId !== 0) {
throw new Error(result.errorDescription);
}
if (result.status === "processing") {
console.log("Task processing...");
continue;
}
if (result.status === "ready") {
console.log("RESPONSE:\n", JSON.stringify(result, null, 2));
return result.solution;
}
}
}
async function main() {
try {
console.log("Creating HUNT task (X-HD mode)...");
const taskId = await createHuntTask();
console.log("Task ID:", taskId);
const xhdToken = await waitForResult(taskId);
console.log("X-HD received:\n", xhdToken);
// ===== 2. Решение капчи, если нужно =====
// const siteMetaToken = "SITE_META_TOKEN";
// const solveTaskId = await createHuntTask({ data: siteMetaToken });
// const finalSolution = await waitForResult(solveTaskId);
// console.log("Final captcha solution:\n", finalSolution);
} catch (error) {
console.error("Error:", error.message);
}
}
main();
