Документация

Документация по API Capsola для решения SmartCaptcha

API Capsola предоставляет возможность создания задач и получения результатов обработки SmartCaptcha. Для использования API необходимо отправить POST-запросы с указанными параметрами.

1. Создание задачи SmartCaptcha

Чтобы создать задачу SmartCaptcha, отправьте POST-запрос на адрес https://api.capsola.cloud/create с указанием API-ключа в заголовке X-API-Key. В теле запроса передайте данные в формате JSON.

Запрос

  • URL: https://api.capsola.cloud/create
  • Метод: POST
  • Заголовок: X-API-Key: API KEY
  • Тело запроса (JSON):
    • type - Обязательно. Тип задачи, в данном случае "SmartCaptcha"
    • click - Обязательно. Изображение области клика в формате Base64.
    • task - Обязательно. Изображение с порядком задания в формате Base64.
    • app_id - Идентификатор приложения разработчика (можно найти в разделе реферальная система для разработчиков)
    {
      "type": "SmartCaptcha",
      "click": "CLICK_BASE_64",
      "task": "TASK_BASE_64",
      "app_id": "YOUR_APP_ID"
    }

Рекомендации по передаче изображений

Для обеспечения качественного решения задачи SmartCaptcha, рекомендуется загружать изображения области клика (CLICK_BASE_64) и порядка задания (TASK_BASE_64) путем их скачивания с источника и последующего преобразования в формат Base64. Это помогает избежать потери и обеспечить точность передаваемых данных в запросе для создания задачи.

Ответ

После успешного создания задачи получите уникальный идентификатор задачи.

{
  "status": 1,
  "response": "9051d4b4-0000-44d3-a4c2-db0215227862"
}
  • status - статус выполнения запроса (1 - успешно, 0 - ошибка).
  • response - идентификатор задания / код ошибки

2. Получение результатов задачи SmartCaptcha

Чтобы получить результаты обработки задачи SmartCaptcha, отправьте POST-запрос на адрес https://api.capsola.cloud/result с указанием API-ключа в заголовке X-API-Key. В теле запроса передайте идентификатор задачи из предыдущего запроса.

Запрос

  • URL: https://api.capsola.cloud/result
  • Метод: POST
  • Заголовок: X-API-Key: API KEY
  • Тело запроса (JSON):
    • id - идентификатор созданной задачи
    {
      "id": "9051d4b4-0000-44d3-a4c2-db0215227862"
    }

Ответ

Получите результаты обработки задачи SmartCaptcha в виде координат.

{
  "status": 1,
  "response": "coordinates:x=34.7,y=108.0;x=234.3,y=72.3;x=149.1,y=107.7;x=43.0,y=30.3;x=137.4,y=32.0"
}
  • status - статус выполнения запроса (1 - успешно, 0 - ошибка).
  • response - координаты в формате x и y для каждой точки / код ошибки.

Если в ответе вы получаете значение CAPCHA_NOT_READY, это означает, что результаты еще не готовы. В таком случае, рекомендуется подождать от 2 до 10 секунд и повторить запрос на получение результатов. Повторяйте запрос, пока не получите успешный результат (status равен 1) или другой статус, указывающий на ошибку.


Примеры использования

Python
import requests
import time
import base64
url_create = 'https://api.capsola.cloud/create'
url_result = 'https://api.capsola.cloud/result'
headers = {
    'Content-type': 'application/json',
    'X-API-Key': 'API_KEY'
}
# Create task
click_url = 'https://capsola.cloud/examples/smart/click.png'
task_url = 'https://capsola.cloud/examples/smart/task.png'
click_response = requests.get(click_url).content
task_response = requests.get(task_url).content
CLICK_BASE_64 = base64.b64encode(click_response)
TASK_BASE_64 = base64.b64encode(task_response)
data = {
  'type': 'SmartCaptcha',
  'click': CLICK_BASE_64,
  'task': TASK_BASE_64,
}
request = requests.post(url = url_create, json = data, headers=headers)
request = request.json()
print(request)
# Get result
if request['status'] == 1:
    task_id = request['response']
    while True:
        time.sleep(2)
        data = {
            'id': task_id
        }
        request = requests.post(url=url_result, json=data, headers = headers)
        request = request.json()
        print(request)
        if request['status'] == 1:
            break
        if request['status'] == 0 and request['response'] != 'CAPCHA_NOT_READY':
            break
PHP
$url_create = 'https://api.capsola.cloud/create';
$url_result = 'https://api.capsola.cloud/result';
$headers = [
    'Content-Type: application/json',
    'X-API-Key: API_KEY'
];
function loadImageAsBase64($imageUrl)
{
    $imageData = file_get_contents($imageUrl);
    if ($imageData === false) {
        return null;
    }
    $base64Image = base64_encode($imageData);
    return $base64Image;
}
function makeRequest($url, $data, $headers) {
    $context = stream_context_create([
        'http' => [
            'method' => 'POST',
            'header' => implode("\r\n", $headers),
            'content' => json_encode($data)
        ]
    ]);
    return json_decode(file_get_contents($url, false, $context), true);
}
# Create task
$CLICK_URL = "https://capsola.cloud/examples/smart/click.png";
$TASK_URL = "https://capsola.cloud/examples/smart/task.png";
$CLICK_BASE_64 = loadImageAsBase64($CLICK_URL);
$TASK_BASE_64 = loadImageAsBase64($TASK_URL);
$data = [
  'type' => 'SmartCaptcha',
  'click' => $CLICK_BASE_64,
  'task' => $TASK_BASE_64
];
$response = makeRequest($url_create, $data, $headers);
var_dump($response);
# Get result
if ($response['status'] == 1) {
    $task_id = $response['response'];
    while (1) {
        sleep(2);
        $response = makeRequest($url_result, ['id' => $task_id], $headers);
        var_dump($response);
        if ($response['status'] == 1) {
            break;
        }
        if ($response['status'] == 0 && $response['response'] != 'CAPCHA_NOT_READY') {
            break;
        }
    }
}
Nodejs
const urlCreate = "https://api.capsola.cloud/create";
const urlResult = "https://api.capsola.cloud/result";
const headers = {
  "Content-Type": "application/json",
  "X-API-Key: API_KEY",
};
const CLICK_URL = "https://capsola.cloud/examples/smart/click.png";
const TASK_URL = "https://capsola.cloud/examples/smart/task.png";
async function loadImageAsBase64(imageUrl) {
  const response = await fetch(imageUrl);
  const arrayBuffer = await response.arrayBuffer();
  const buffer = Buffer.from(arrayBuffer);
  const base64Image = buffer.toString('base64');
  return base64Image;
}
async function createTask() {
  const request = await fetch(urlCreate, {
    method: "POST",
    headers: headers,
    body: JSON.stringify({
      type: "SmartCaptcha",
      click: await loadImageAsBase64(CLICK_URL),
      task: await loadImageAsBase64(TASK_URL),
    }),
  });
  const { status, response } = await request.json();
  console.log({ status, response });
  if (status === 1) return response;
  console.error("Failed to create task:", response);
  return null;
}
async function getResult(taskId) {
  while (true) {
    await new Promise((resolve) => setTimeout(resolve, 2000));
    const request = await fetch(urlResult, {
      method: "POST",
      headers: headers,
      body: JSON.stringify({ id: taskId }),
    });
    const { status, response } = await request.json();
    console.log({ status, response });
    if (status === 1) break;
    if (status === 0 && response !== "CAPCHA_NOT_READY") break;
  }
}
async function main() {
  const taskId = await createTask();
  if (taskId) await getResult(taskId);
}
main();