УкрПочта - групповая проверка трек-номеров

23.10.17

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

Необходимо в течение относительно небольшого промежутка времени получить актуальное состояние по трек номеру в системе УкрПочта большого количества сообщений? Тогда во второй раз воспользуемся неофициальным парсингом страницы сервиса УкрПочты.

После написания предыдущей статьи про отслеживание одного трек кода (//infostart.ru/public/649861/) произошло три события:

- Сервис http://services.ukrposhta.ua/bardcodesingle/ перешел в режим нетрудоспособности, встречая своих посетителей обнадеживающей надписью о том, что в ближайшее врем все опять будет работать. 

- УкрПочта запустила новый сервис по адресу http://ukrposhta.ua/ua/vidslidkuvati-forma-poshuku и добавила изюминку в виде "невидимой" рекапчи от Google ("невидимый" режим - это отсутствие какого-либо намека на ввод капчи (даже банальной галочки "Я не робот") до тех пор пока Google не считает Вас ботом. Если считает - то всплывает капча).

- Мы наконец-то доделали возможность проверять последний статус групповым запросом (до 240 треков за раз), используя сервис по адресу http://services.ukrposhta.ua/barcodestatistic Скорость работы одного такого запроса на 240 записей намного больше чем аналогичные 240 запросов по одному треку.

Как и в прошлый раз, при помощи программы Fiddler подсматриваем протокол общения и внедряем его у себя.

Изначально запрос GET идет первый раз без указания файла на страницу http://services.ukrposhta.ua/barcodestatistic/default.aspx, в которой мы узнаем Cookies и значения переменных hiddenSessionGuid и VIEWSTATE. Формируем запрос и отправляем его по тому же адресу, но уже методом POST. Собственно, сами функции (в качестве параметра функции ОтслеживаниеПосылкиУкрПочта - массив со списком трек номеров).

Функция RegExp_Exec(Текст,ШаблонРегВыр)
	RegExp = Новый COMОбъект("VBScript.RegExp");
    RegExp.IgnoreCase = Ложь; 
    RegExp.Global = Истина;
    RegExp.MultiLine = Ложь;
	Текст_ = Новый ТекстовыйДокумент;
	Текст_.ДобавитьСтроку(текст);
	Для а=0 по текст_.КоличествоСтрок() Цикл
		строка = Текст_.ПолучитьСтроку(а);
		RegExp.Pattern = ШаблонРегВыр;
		Matches=RegExp.Execute(строка);
	    ЧислоВхождений=Matches.Count();
	    Если ЧислоВхождений>0 Тогда 
            Match = Matches.Item(0);
			Значение = Match.Submatches.Item(0);
            Прервать;
		КонецЕсли;
	КонецЦикла;		
	Возврат СокрЛ(Значение);
КонецФункции




Функция ОтслеживаниеПосылкиУкрПочта(Знач Данные)
	Соединение = Новый HTTPСоединение("services.ukrposhta.ua"); 
	ЗаголовокHTTP = Новый Соответствие(); 
	ЗаголовокHTTP.Вставить("Host", "services.ukrposhta.ua"); 
	ЗаголовокHTTP.Вставить("Upgrade-Insecure-Requests", "1");
	ЗаголовокHTTP.Вставить("User-Agent", "Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36");
	ЗаголовокHTTP.Вставить("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8");
	ЗаголовокHTTP.Вставить("Accept-Encoding", "deflate");
	ЗаголовокHTTP.Вставить("Accept-Language", "ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4");
	Запрос = Новый HTTPЗапрос("/barcodestatistic/Default.aspx",ЗаголовокHTTP); 
	Ответ = Соединение.Получить(Запрос); 
	ОтветВВидеСтроки = Ответ.ПолучитьТелоКакСтроку();
	Cookie = ответ.Заголовки.Получить("Set-Cookie");
	поз = Найти(Cookie,";");
	Если поз>0 тогда
		Cookie=Лев(Cookie,поз-1);
	КонецЕсли;
	ЗначениеVIEWSTATE = RegExp_exec(ОтветВВидеСтроки,"<input type=""hidden"" name=""__VIEWSTATE"" id=""__VIEWSTATE"" value=[^>](.*)"" />");
	ЗначениеhiddenSessionGuid = RegExp_exec(ОтветВВидеСтроки, "<input type=""hidden"" name=""ctl00\$centerContent\$hiddenSessionGuid"" id=""ctl00_centerContent_hiddenSessionGuid"" value=[^>](.*)"" />");
	Boundary ="----WebKitFormBoundaryLQSVHmY12nEZdO0l";
	ЗаписьТекста=("--" + Boundary);
	ЗаписьТекста=ЗаписьТекста+Символы.ВК + Символы.ПС+("Content-Disposition: form-data; name=""__VIEWSTATE""" + Символы.ВК + Символы.ПС);
	ЗаписьТекста=ЗаписьТекста+Символы.ВК + Символы.ПС+(ЗначениеVIEWSTATE);	   
	ЗаписьТекста=ЗаписьТекста+Символы.ВК + Символы.ПС+("--" + Boundary);
	ЗаписьТекста=ЗаписьТекста+Символы.ВК + Символы.ПС+("Content-Disposition: form-data; name=""__VIEWSTATEGENERATOR""" + Символы.ВК + Символы.ПС);
	ЗаписьТекста=ЗаписьТекста+Символы.ВК + Символы.ПС+("0D589B25");	
	ЗаписьТекста=ЗаписьТекста+Символы.ВК + Символы.ПС+("--" + Boundary);
	ЗаписьТекста=ЗаписьТекста+Символы.ВК + Символы.ПС+("Content-Disposition: form-data; name=""ctl00$centerContent$hiddenSessionGuid""" + Символы.ВК + Символы.ПС);
	ЗаписьТекста=ЗаписьТекста+Символы.ВК + Символы.ПС+(ЗначениеhiddenSessionGuid);
	ЗаписьТекста=ЗаписьТекста+Символы.ВК + Символы.ПС+("--"+Boundary);
	ЗаписьТекста=ЗаписьТекста+Символы.ВК + Символы.ПС+("Content-Disposition: form-data; name=""ctl00$centerContent$fileUploadXmlBarcodes""; filename=""re.txt""");
	ЗаписьТекста=ЗаписьТекста+Символы.ВК + Символы.ПС+("Content-Type: text/plain");
	ЗаписьТекста=ЗаписьТекста+Символы.ВК + Символы.ПС;
	Для тмп=0 по Данные.Количество()-1 Цикл 
		ЗаписьТекста=ЗаписьТекста+Символы.ВК + Символы.ПС+(Данные.Получить(тмп));	
	КонецЦикла;
	ЗаписьТекста=ЗаписьТекста+Символы.ВК + Символы.ПС+("--" + Boundary);
	ЗаписьТекста=ЗаписьТекста+Символы.ВК + Символы.ПС+("Content-Disposition: form-data; name=""ctl00$centerContent$btnUpload""" + Символы.ВК + Символы.ПС);
	ЗаписьТекста=ЗаписьТекста+Символы.ВК + Символы.ПС+("Пошук");
	ЗаписьТекста=ЗаписьТекста+Символы.ВК + Символы.ПС+("--" + Boundary+"--")+Символы.ВК + Символы.ПС;
	РазмерФайлаОтправки = Формат(СтрДлина(ЗаписьТекста)+3,"ЧГ=");			
		
		
	ЗаголовокHTTP = Новый Соответствие(); 
	ЗаголовокHTTP.Вставить("Host", "services.ukrposhta.ua"); 
	ЗаголовокHTTP.Вставить("Cache-Control", "max-age=0");
	ЗаголовокHTTP.Вставить("Origin", "http://services.ukrposhta.ua");
	ЗаголовокHTTP.Вставить("Upgrade-Insecure-Requests", "1");
	ЗаголовокHTTP.Вставить("User-Agent", "Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36");
	ЗаголовокHTTP.Вставить("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8");
	ЗаголовокHTTP.Вставить("Referer", "http://services.ukrposhta.ua/barcodestatistic/Default.aspx");
	ЗаголовокHTTP.Вставить("Accept-Encoding", "deflate");
	ЗаголовокHTTP.Вставить("Accept-Language", "ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4");
	ЗаголовокHTTP.Вставить("Cookie", Cookie); 
	ЗаголовокHTTP.Вставить("Content-Type", "multipart/form-data; boundary=" + Boundary);
	ЗаголовокHTTP.Вставить("Content-Length", РазмерФайлаОтправки);
		
	Запрос = Новый HTTPЗапрос("/barcodestatistic/Default.aspx",ЗаголовокHTTP); 
	Запрос.УстановитьТелоИзСтроки(ЗаписьТекста,КодировкаТекста.UTF8,ИспользованиеByteOrderMark.НеИспользовать);	
	Ответ = Соединение.ОтправитьДляОбработки(Запрос); 
	ОтветВВидеСтроки = Ответ.ПолучитьТелоКакСтроку();
	ЧтениеHTML = Новый ЧтениеHTML;
	ЧтениеHTML.УстановитьСтроку(ОтветВВидеСтроки,"UTF-8");
	тз = НОвый ТаблицаЗначений;
	тз.Колонки.Добавить("Номер");
	тз.Колонки.Добавить("Дата_");
	тз.Колонки.Добавить("Код_");
	тз.Колонки.Добавить("Описание");
	
	ПостроительDOM = Новый ПостроительDOM;
	ДокументHTML = ПостроительDOM.Прочитать(ЧтениеHTML);
	всякое = ДокументHTML.ПолучитьЭлементыПоИмени("td");
	индекс = 0;
	Пока индекс < всякое.Количество() Цикл
		НС = тз.Добавить();
		НС.Номер = СокрЛП(всякое.Элемент(индекс).ТекстовоеСодержимое);
		НС.Дата_ = СокрЛП(всякое.Элемент(индекс+2).ТекстовоеСодержимое);
		НС.Код_ = СокрЛП(всякое.Элемент(индекс+3).ТекстовоеСодержимое);
		НС.Описание = СокрЛП(всякое.Элемент(индекс+4).ТекстовоеСодержимое);
		индекс = индекс + 6;
	КонецЦикла;
	ЧтениеHTML.Закрыть();
	ВОЗВРАТ тз;
КонецФункции

 

См. также

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

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

128000 руб.

19.12.2023    4485    5    0    

11

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

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

60000 руб.

07.05.2019    35879    71    45    

30

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

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

57600 руб.

26.11.2024    3330    3    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    1402    9    2    

11

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

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

36000 руб.

03.08.2020    19703    24    24    

21

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

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

24000 руб.

27.09.2024    5576    5    2    

6

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

Решение осуществляет синхронизацию задач Битрикс24 и 1С, что позволяет в одной системе ставить задачи, контролировать выполнение всего пула задач с группировкой по ответственным и проектам, формировать управленческие отчеты по работе сотрудников (загрузка, просроченные задачи), уведомлять сотрудников о ходе выполнения задач посредством чат-бот Telegram

7200 руб.

04.05.2021    21323    14    19    

19
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. V_V_V 26.10.17 16:19 Сейчас в теме
А зачем дважды
RegExp.IgnoreCase = Ложь;
RegExp.Global = Истина;
RegExp.MultiLine = Ложь;
2. abavas 14 29.10.17 21:46 Сейчас в теме
(1) Без злого умысла. Опечатка. Спасибо. Исправил.
Оставьте свое сообщение