Cloudflare Waiting Room
Новый механизм защиты сайтов от чрезмерного количества запросов: пользователю необходимо подождать в среднем около 3 минут, прежде чем продолжить работу с ресурсом:

Также данный тип Cloudflare можно определить по заголовку страницы:
-
Для выполнения данной задачи используйте ваши собственные прокси.
-
После решения вы получите специальные cookie, которые необходимо добавить в браузер.
Параметры запроса
ВАЖНО: получайте htmlPageBase64 непосредственно перед созданием задачи, чтобы избежать ошибок при решении (см. пример получения htmlPageBase64 ниже).
type<string>requiredTurnstileTask
websiteURL<string>requiredАдрес страницы, на которой находится проверка
websiteKey<string>requiredКлюч Cloudflare. Допускается передача любой строки, например: xxxxxx.
cloudflareTaskType<string>requiredwait_room
htmlPageBase64<string>requiredHTML-страница в формате base64, на которой присутствует заголовок <title>Waiting Room powered by Cloudflare</title>
Пример получения строки htmlPageBase64:
var serializer = new XMLSerializer();
var fullHtml = serializer.serializeToString(document);
var htmlBase64 = btoa(unescape(encodeURIComponent(fullHtml)));
console.log(htmlBase64);
userAgent<string>requiredUser-Agent браузера. Используйте текущее значение, поддерживаемое CapMonster Cloud: userAgentPlaceholder
Получить актуальное значение можно по адресу: https://capmonster.cloud/api/useragent/actual.
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Пароль прокси-сервера.
Метод создания задачи
https://api.capmonster.cloud/createTask
Для пользователей из России также доступен:
https://ru.api.capmonster.cloud/createTask
Подробнее в разделе createTask.
Пример запроса
{
"clientKey": "API_KEY",
"task": {
"type": "TurnstileTask",
"websiteURL": "https://yourwebsite.com/page-with-cf-waitroom",
"websiteKey": "xxxxxxxxxx",
"cloudflareTaskType": "wait_room",
"htmlPageBase64": "PCFET0NUWVBFIGh0...vYm9keT48L2h0bWw+",
"userAgent": "userAgentPlaceholder",
"proxyType": "your-proxy-type",
"proxyAddress": "your-proxy-address",
"proxyPort": 1234,
"proxyLogin": "your-proxy-login",
"proxyPassword": "your-proxy-password"
}
}
Пример ответа
{
"errorId":0,
"taskId":407533072
}
Метод получения результата задачи
Используйте метод getTaskResult, чтобы получить решение Waiting Room. В зависимости от загрузки системы вы получите ответ через время в диапазоне от 5 до 20 с.
https://api.capmonster.cloud/getTaskResult
Для пользователей из России также доступен:
https://ru.api.capmonster.cloud/getTaskResult
Подробнее в разделе getTaskResult.
Пример запроса
{
"clientKey": "API_KEY",
"taskId": 407533072
}
Пример ответа
{
"errorId": 0,
"status": "ready",
"solution": {
"cf_clearance": "1tarGvbY2_ZhQdYxpSBloao.FoOn9VtcJtmb_IQ_hCE-1761217338-1.2.1.1-vyVPoLYIGX0VCJomVuLjF7n0kdM0PXaPjpDsRcohxGr7hb2CE7WfcHpmQZ70goqEjdWxPsDhSVaKNTz9opxWguiNdWEEq_.SceWXIqfP7tnEb69f3bP0mixNqcWy_5P_9INpoAEqr1k7aYU0r45PT4gPr5pwHxedVySyLRdoBXIJasdTE52YOQ3NPdGWTwQ_3h2n_wYqqIvf0kCSAvimRrmsgZxomlyejwqPI6ZHi.w"
}
}
| Свойство | Тип | Описание |
|---|---|---|
| cf_clearance | String | Специальные куки cloudflare, которые вы можете подставить в свой браузер |
Используйте библиотеку SDK
- JavaScript / TypeScript
- Python
- C#
Показать код (для браузера)
// https://github.com/CapMonsterCloud/capmonster-nodejs-captcha-solver
import {
CapMonsterCloudClientFactory,
ClientOptions,
TurnstileRequest
} from "@zennolab_com/capmonstercloud-client";
document.addEventListener("DOMContentLoaded", async () => {
const API_KEY = "YOUR_API_KEY"; // Укажите ваш API-ключ CapMonster Cloud
const client = CapMonsterCloudClientFactory.Create(
new ClientOptions({ clientKey: API_KEY })
);
// Cloudflare Waiting Room решается только с использованием вашего прокси
const proxy = {
proxyType: "http",
proxyAddress: "123.45.67.89",
proxyPort: 8080,
proxyLogin: "username",
proxyPassword: "password",
};
const turnstileRequest = new TurnstileRequest({
websiteURL: "https://yourwebsite.com/page-with-waiting-room",
websiteKey: "xxxxxxxxxx",
cloudflareTaskType: "wait_room",
proxy,
htmlPageBase64: "your_html_page_base64",
userAgent: "userAgentPlaceholder",
});
// При необходимости можно проверить баланс
const balance = await client.getBalance();
console.log("Balance:", balance);
const result = await client.Solve(turnstileRequest);
console.log("Solution:", result.solution);
});
Показать код (Node.js)
// https://github.com/CapMonsterCloud/capmonster-nodejs-captcha-solver
const {
CapMonsterCloudClientFactory,
ClientOptions,
TurnstileRequest,
} = require("@zennolab_com/capmonstercloud-client");
const API_KEY = "YOUR_API_KEY"; // Укажите ваш API-ключ CapMonster Cloud
async function solveTurnstileWaitRoom() {
const client = CapMonsterCloudClientFactory.Create(
new ClientOptions({ clientKey: API_KEY }),
);
// Cloudflare Waiting Room решается только с использованием вашего прокси
const proxy = {
proxyType: "http",
proxyAddress: "123.45.67.89",
proxyPort: 8080,
proxyLogin: "username",
proxyPassword: "password",
};
const turnstileRequest = new TurnstileRequest({
websiteURL: "https://yourwebsite.com/page-with-waiting-room",
websiteKey: "xxxxxxxxxx",
cloudflareTaskType: "wait_room",
proxy,
htmlPageBase64: "your_html_page_base64",
userAgent: "userAgentPlaceholder",
});
// При необходимости можно проверить баланс
const balance = await client.getBalance();
console.log("Balance:", balance);
const result = await client.Solve(turnstileRequest);
console.log("Solution:", result.solution);
}
solveTurnstileWaitRoom().catch(console.error);
Показать код
# https://github.com/CapMonsterCloud/capmonster-python-captcha-solver
import asyncio
from capmonstercloudclient import CapMonsterClient, ClientOptions
from capmonstercloudclient.requests import TurnstileRequest
from capmonstercloudclient.requests.proxy_info import ProxyInfo
API_KEY = "YOUR_API_KEY" # Укажите ваш API-ключ CapMonster Cloud
async def main():
client = CapMonsterClient(
options=ClientOptions(api_key=API_KEY)
)
# Cloudflare wait_room решается только с использованием вашего прокси
proxy = ProxyInfo(
proxyType="http",
proxyAddress="123.45.67.89",
proxyPort=8080,
proxyLogin="username",
proxyPassword="password",
)
turnstile_request = TurnstileRequest(
websiteURL="https://yourwebsite.com/page-with-waiting-room",
websiteKey="xxxxxxxx",
cloudflareTaskType="wait_room",
proxy=proxy,
htmlPageBase64="your_html_page_base64",
userAgent="userAgentPlaceholder",
)
# При необходимости можно проверить баланс
balance = await client.get_balance()
print("Balance:", balance)
result = await client.solve_captcha(turnstile_request)
print("Solution:", result)
asyncio.run(main())
Показать код
// https://github.com/CapMonsterCloud/capmonster-dotnet-captcha-solver
using System;
using System.Threading.Tasks;
using Zennolab.CapMonsterCloud;
using Zennolab.CapMonsterCloud.Requests;
class Program
{
static async Task Main(string[] args)
{
// Укажите ваш API-ключ CapMonster Cloud
var clientOptions = new ClientOptions
{
ClientKey = "YOUR_API_KEY"
};
var cmCloudClient = CapMonsterCloudClientFactory.Create(clientOptions);
// Cloudflare Waiting Room решается только с использованием вашего прокси
var turnstileRequest = new TurnstileRequest
{
WebsiteUrl = "https://yourwebsite.com/page-with-waiting-room",
WebsiteKey = "xxxxxxxx",
CloudflareTaskType = "wait_room",
HtmlPageBase64 = "your_html_page_base64",
UserAgent = "userAgentPlaceholder",
Proxy = new ProxyContainer(
"123.45.67.89",
8080,
ProxyType.Http,
"username",
"password"
)
};
// При необходимости можно проверить баланс
var balance = await cmCloudClient.GetBalanceAsync();
Console.WriteLine("Balance: " + balance);
var turnstileResult = await cmCloudClient.SolveAsync(turnstileRequest);
Console.WriteLine("Solution: " + turnstileResult.Solution.Clearance);
}
}
