Эксперт
Просматривает форум
Сообщений всего: 8217
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 357
|
Готовый код для подключению к сервису anti-captcha.com для решения текстовой капчи
Ключ dce6bcbb1a728ea8d563de6d169a2057 указан для примера.
CODE:pause (1000);
savescreen(JPG, "C:\capcha.jpg", 653, 332, 995, 448, -1);//Делаем скрин капчи и сохраняем на диск
sleep(100);
string O;
int k=read_captcha("dce6bcbb1a728ea8d563de6d169a2057", "C:\capcha.jpg", #O);
messagebox (k);//Возвращает 1 при решение. <0 при ошибке
messagebox (O);//Решение или текст ошибки
function read_captcha(string KEY, string FL, string #Ot)
{
char BYTE[100000];//Массив байт для загрузки файла с капчей JPG. Потом его используем для JSON запроса
//Загружаем файл с капчей JPG и сразу форматируем его в base64
//первой выполнится функция read_file, вернет размер его и в #file[0] будет уже указатель на массив байт файла
//Затем выполнится функция base64code
string file64=base64code (#BYTE[0], read_file(#BYTE[0], FL));//Перед этим скриним часть экрана с капчей и сохраняем ее в C:\tab.jpg функцией savescreen
string json;//Строка для JSON запроса
//Формируем JSON запрос согласно документации anti-captcha.com
/*
{
"clientKey":"dce6bcbb1a728ea8d563de6d169a2057",
"task":
{
"type":"ImageToTextTask",
"body":"BASE64_BODY_HERE!",
"phrase":false,
"case":false,
"numeric":0,
"math":false,
"minLength":0,
"maxLength":0
}
}
*/
json="{^"clientKey^":^""+KEY+"^"," +
"^"task^":{^"type^":^"ImageToTextTask^"" +
",^"body^":^""+file64+"^",^"phrase^"" +
":false,^"case^":false,^"numeric^":0,^"math^"" +
":false,^"minLength^":0,^"maxLength^":0}}";
int aW=size(json);//Узнаем размер JSON запроса
strcpy(#BYTE[0], json);//Записываем JSON запрос в массив байт
//messagebox(json);
string Header="Content-Type: application/x-www-form-urlencoded";//Формируем какой то заголовок
char REZ[100000];//Массив для приема ответа
int K=0;
A: sendgetweb(#REZ[0], "My bot", "POST", "https:/^/api.anti-captcha.com", "createTask", Header, #BYTE[0], aW);//Отправляем на anti-captcha.com и получаем ответ
//messagebox (format(#REZ[0]));
//Ответ такого формата
/*
{
"errorId":0,
"taskId":7654321
}
*/
if (parserjson(Rez_Json, format(#REZ[0]))!=1)//Парсим ответ
{
if (K>2)
{
Ot="Не подключились к сервису";
return -1;
}
K++;
pause(2000);
goto A;
}
//messagebox (format(#REZ[0]));
if (Rez_Json.errorId=="0")//Если нет ошибки
{
string id=Rez_Json.taskId;//Сохраняем полученный ID
//messagebox (id);
pause(3000);//Пауза
loop(50)
{
pause(2000);//Пауза в цикле между запросами решения
//Формируем запрос на ответ о решение капчи куда записываем наш clientKey и полученный taskId
/*
{
"clientKey":"dce6bcbb1a728ea8d563de6d169a2057",
"taskId": 7654321
}
*/
json="{^"clientKey^":^""+KEY+"^",^"taskId^": "+id+"}";
aW=size(json);//Узнаем размер JSON запроса
strcpy(#BYTE[0], json);//Записываем JSON запрос в массив байт
//messagebox(json);
sendgetweb(#REZ[0], "My bot", "POST", "https:/^/api.anti-captcha.com", "getTaskResult", Header, #BYTE[0], aW);//Отправляем на anti-captcha.com и получаем ответ
//messagebox (format(#REZ[0]));
//Ответ такого формата
/*
{
"errorId":0,
"status":"ready",
"solution":
{
"text":"deditur",
"url":"http:\/\/61.39.233.233\/1\/147220556452507.jpg"
},
"cost":"0.000700",
"ip":"46.98.54.221",
"createTime":1472205564,
"endTime":1472205570,
"solveCount":"0"
}
*/
if (parserjson(Rez_Json, format(#REZ[0]))!=1)//Парсим ответ
{
continue;
}
if (Rez_Json.errorId!="0")//Если есть ошибка
{
//messagebox("errorId "+Rez_Json.errorId);
Ot=Rez_Json.errorId;
//messagebox(format(#REZ[0]));
return -2;
//break;//Выходим из цикла
}
if (Rez_Json.status=="ready")//Если капча решена
{
//messagebox (Rez_Json.solution.text);//Выводим решение
//messagebox (Rez_Json.solution.url);
Ot=Rez_Json.solution.text;
return 1;
//break;//Выходим из цикла
}
}
}
else
{
//messagebox (Rez_Json.errorCode);//Если не верный clientKey
Ot=Rez_Json.errorCode;
return -3;
}
Ot="Ошибка";
return -4;
}
function read_file(char #B[0], string pyt)
{
int size_file=0;
if (fopen (pyt, "rb")!=0)
{
size_file=freadb(#B[0], 10000);
fclose();
}
//messagebox (size_file);
return size_file;
} |