Автоматическое решение капчи с использованием сервиса Anti Capcha

30.07.18

Интеграция - WEB-интеграция

В данной статье приводится пример автоматического решения капчи с целью авторизации и дальнейшего использования веб ресурса.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Автоматическое решение капчи с использованием сервиса Anti Capcha:
.epf 7,19Kb
3
3 Скачать (1 SM) Купить за 1 850 руб.

Решение капчи с помощью сервиса Anti Capcha можно условно разделить на 3 этапа:

  1. Получение изображения в Base64
  2. Создание задачи на решение 
  3. Получение результата решения

Накидаем простенький интерфейс - форма, реквизит вида картинка, реквизит поле ввода, 2 команды;

  • GetImage - получение капчи, помещение в хранилище, вывод на форму
  • SolveCapcha - создание задачи на решение и вывод результа

Фича делалась для англоязычного проекта поэтому код будет на английском.
Получаем картинку с веб ресурса get запросом, помещаем во временное хранилище и выводим на форму:

&AtClient
Procedure GetImage(Command)
	ImageBinary = GetImageAtServer(); 
	Image = PutToTempStorage(ImageBinary,UUID);
EndProcedure

&AtServer
Function GetImageAtServer()
	Headers = New Map;	
	Headers.Insert("Host", "www.adultwork.com");
	Headers.Insert("Connection", "keep-alive");
	Headers.Insert("Upgrade-Insecure-Requests", "1");
	Headers.Insert("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
	Headers.Insert("User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36");
	Headers.Insert("Accept-Language", "en-US,en;q=0.8,ru;q=0.6");
	Headers.Insert("Cookie", "C=149; ReferralID=0;CameViaEntryPage=CountryID=149&GMTOffset=%2D180&HitID=1234660132&Time=12%2F09%2F2017+20%3A37%3A31");
	
	Connection = New HTTPConnection("www.adultwork.com",,,,,, New OpenSSLSecureConnection);
	Request = New HTTPRequest("imgTuring.asp", Headers);
	Response = Connection.CallHTTPMethod("GET", Request);

	ImageBinary = Response.GetBodyAsBinaryData();
	Return ImageBinary; 
EndFunction

Далее приступаем к решению. Заводим клиентский ключ с сайта, получаем картинку и передаем данные в следующую функцию.

&AtClient
Procedure SolveCaptcha(Command)
	ClientKey = "ххххххххххххххххххххххххх"; //put your key here
	ImageBinary = GetFromTempStorage(Image);
	Captcha = SolveCaptchaAtServer(ImageBinary,ClientKey);
EndProcedure

Создаем соединение, заполняем заголовки запроса и создаем задачу на решение. Если задача создана успешно, получаем результат решения. Т.к капчу решают сотрудники сервиса, то нужно некоторое время на ее решение. Методом подбора было установлено, что капча решается в среднем за 10 секунд. Делаем задержку и получаем результат решения.

&AtServer
Function SolveCaptchaAtServer(ImageBinary,ClientKey)
	Connection = New HTTPConnection("api.anti-captcha.com");
	Headers = New Map;
	Headers.Insert("Host", "api.anti-captcha.com");
	Headers.Insert("Connection", "keep-alive"); 
	Headers.Insert("Content-Type", "multipart/form-data");	
		
	TaskResult = CreateTask(Connection,Headers,ClientKey,ImageBinary);
	If TaskResult.errorId = 0 Then
		Delay(10);
		TaskResultBody = GetTaskResultBody(Connection,Headers,ClientKey,TaskResult.taskId);
		If TaskResultBody.errorId = 0 Then
			Return TaskResultBody.solution.text;		
		Else
			Message("Result error");	
		Endif;	
	Else
		Message("Failed to create task.");
	EndIF;		
EndFunction

&AtServer
Procedure Delay(Seconds)
	TimeOut = CurrentDate() + Seconds;
	While CurrentDate() <= TimeOut Do 
		//TODO: waiting
	EndDo;	
EndProcedure

Для создания задачи необходимо перевести картинку в Base64 и создать текст POST запроса. В ответе мы получим код ошибки (если ошибки нет код - 0) и id созданной задачи. 

&AtServer
Function CreateTask(Connection,Headers,ClientKey,ImageBinary)
	Base64Img = Base64String(ImageBinary);
	JSONBody = GetTaskBody(Base64Img,ClientKey);	
	Request = New HTTPRequest("/createTask", Headers);
	Request.SetBodyFromString(JSONBody);
	Response = Connection.CallHTTPMethod("POST", Request);
	ResultJson = Response.GetBodyAsString();	
	ReadJson = New JSONReader;
	ReadJson.SetString(ResultJson);
	Return ReadJSON(ReadJson); 
EndFunction	

&AtServer
Function GetTaskBody(Base64Img,ClientKey)
	WriteJson = New JSONWriter;
	WriteJson.SetString();	
	JsonBody = New Structure;
	JsonBody.Insert("clientKey",ClientKey);
	JsonTask = New Structure;
	JsonTask.Insert("type","ImageToTextTask");
	JsonTask.Insert("body",Base64Img);
	JsonTask.Insert("phrase",False);
	JsonTask.Insert("case",False);
	JsonTask.Insert("numeric",False);
	JsonTask.Insert("math",0);
	JsonTask.Insert("minLength",0);
	JsonTask.Insert("maxLength",0);
	JsonBody.Insert("task",JsonTask);
	WriteJSON(WriteJson,JsonBody);	
	Return WriteJson.Close();	
EndFunction

Для получения результата решения нужно отправить POST запрос с id задачи и пользовательским ключом.

&AtServer
Function GetTaskResultBody(Connection,Headers,ClientKey,TaskId)							
	WriteJson = New JSONWriter;
	WriteJson.SetString();
	JsonBody = New Structure;
	JsonBody.Insert("clientKey",ClientKey);
	JsonBody.Insert("taskId",Format(TaskId,"NG="));
	WriteJSON(WriteJson,JsonBody);

	SerializenStr = WriteJson.Close();
	Request = New HTTPRequest("/getTaskResult", Headers);
	Request.SetBodyFromString(SerializenStr);
	Response = Connection.CallHTTPMethod("POST", Request);
	ResultJson = Response.GetBodyAsString();

	ReadJson = New JSONReader;
	ReadJson.SetString(ResultJson);
	Return ReadJSON(ReadJson);	
EndFunction

Таким образом можно логиниться в системе, получать куки и использовать эти данные для авторизации. 
Спасибо за внимание, всем удачи!

anti capcha капча capcha

См. также

WEB-интеграция Администрирование веб-серверов Платные (руб)

Веб-портал обеспечивает удобный доступ к конфигурации 1С:ITIL(ИТИЛ), 1С:ITILIUM, Управление IT-отделом 8 через интернет с любого устройства посредством браузера, увеличивая эффективность работы пользователей и снижая нагрузку на сервер. Быстрая инсталляция портала за пару часов, удобный и интуитивно понятный интерфейс и безопасность данных помогут упростить работу с порталом и ускорить выполнение бизнес-процессов компании.

128000 руб.

19.12.2023    2935    5    0    

11

WEB-интеграция Анализ продаж Системный администратор Программист Пользователь Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Управленческий учет Платные (руб)

Модуль "Подсистема интеграции AmoCRM с 1С" позволяет обеспечить единое информационное пространство, в котором пользователи могут эффективно управлять клиентской базой, следить за статусами сделок и поддерживать актуальность данных как в AmoCRM, так и в 1С.

60000 руб.

07.05.2019    35010    69    45    

27

Оптовая торговля Розничная торговля WEB-интеграция 1С:Управление торговлей 10 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Платные (руб)

Онлайн-заказ - это решение для автоматизации процесса оформления заказов на сайте в торговых организациях. Продукт обеспечивает легкое взаимодействие между компанией и клиентами через веб-интерфейс, интегрированный с 1С:Предприятие. Система позволяет снизить операционные расходы, повысить лояльность клиентов и оптимизировать работу отдела продаж.

57600 руб.

26.11.2024    2687    2    3    

5

WEB-интеграция Программист Бизнес-аналитик Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Оптовая торговля, дистрибуция, логистика ИТ-компания Платные (руб)

Модуль "Экспортер" — это расширение для 1С, предназначенное для автоматизации процессов выгрузки данных. Оно позволяет эффективно извлекать, преобразовывать и передавать данные из систем 1С в интеграционную платформу Spot2D. Подсистема упрощает настройку, снижает количество ручных операций и обеспечивает удобный контроль данных.

14400 руб.

20.12.2024    1015    6    2    

8

WEB-интеграция Программист Руководитель проекта Платформа 1С v8.3 1C:Бухгалтерия 1С:Франчайзи, автоматизация бизнеса Платные (руб)

Расширение значительно упрощает написание API на 1С. Веб программисты получают простой и понятный доступ к 1С. Описание API создаётся автоматически и представляется в виде удобном как для человека, так и для программной обработки.

24000 руб.

27.09.2024    4581    4    2    

5

Сайты и интернет-магазины WEB-интеграция Системный администратор Программист Пользователь Платформа 1С v8.3 1C:Бухгалтерия 1С:Управление торговлей 11 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

Интеграционный модуль обмена между конфигурацией Альфа Авто 5 и Альфа Авто 6 и порталом AUTOCRM. Данный модуль универсален. Позволяет работать с несколькими обменами AUTOCRM разных брендов в одной информационной базе в ручном и автоматическом режиме.

36000 руб.

03.08.2020    19247    23    22    

20

WEB-интеграция Программист Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Бытовые услуги, сервис Платные (руб)

Внешняя обработка разрабатывалась для загрузки документов из Ветменеджер в 1С: Бухгалтерия 3.0

12000 руб.

02.02.2021    19012    54    50    

31
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. bulpi 217 30.07.18 12:59 Сейчас в теме
"Т.к капчу решают сотрудники сервиса, то нужно некоторое время на ее решение"
???? Т.е. там сидят негры, которые посылают ответ руками ?
2. samoylov093 13 30.07.18 20:48 Сейчас в теме
(1) не обязательно негры, но в общем да)
Оставьте свое сообщение