Чтобы создать задачу SmartCaptcha, отправьте POST-запрос на адрес https://api.capsola.cloud/create
с указанием API-ключа в заголовке X-API-Key. В теле запроса передайте данные в формате JSON.
https://api.capsola.cloud/create
POST
X-API-Key: API KEY
application/json
type
- * Обязательно. Тип задачи, в данном случае "SmartCaptcha" click
- * Обязательно. Изображение области клика в формате Base64. task
- * Обязательно. Изображение с порядком задания в формате Base64. app_id
- Идентификатор приложения разработчика (можно найти в разделе реферальная система для разработчиков){
"type": "SmartCaptcha",
"click": "CLICK_BASE_64",
"task": "TASK_BASE_64"
}
Для обеспечения качественного решения задачи SmartCaptcha, рекомендуется загружать изображения области клика (CLICK_BASE_64
) и порядка задания (TASK_BASE_64
) путем их скачивания с источника и последующего преобразования в формат Base64. Это помогает избежать потери и обеспечить точность передаваемых данных в запросе для создания задачи.
После успешного создания задачи получите уникальный идентификатор задачи.
{
"status": 1,
"response": "9051d4b4-0000-44d3-a4c2-db0215227862"
}
status
- статус выполнения запроса (1 - успешно, 0 - ошибка).response
- идентификатор задания / код ошибкиЧтобы получить результаты обработки задачи SmartCaptcha, отправьте POST-запрос на адрес https://api.capsola.cloud/result
с указанием API-ключа в заголовке X-API-Key
. В теле запроса передайте идентификатор задачи из предыдущего запроса.
https://api.capsola.cloud/result
POST
X-API-Key: API KEY
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) или другой статус, указывающий на ошибку.
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).decode('utf-8')
TASK_BASE_64 = base64.b64encode(task_response).decode('utf-8')
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
$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;
}
}
}
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();