Область применения
Компонента HttpSrv7 позволяет создавать веб-сервисы в среде 1С 7.7 и даже, используя файлы HTML, несложные веб-сайты. С помощью нее можно обеспечить доступ к данным 1С 7.7 из браузера. Дополнительно используя клиент HTTP для 1С 7.7 (публикация № 1152364) можно наладить обмен данными между удаленными информационными базами.
Компоненты разработаны по технологии создания внешних компонент COM. Тестировались на платформе 1С релиза 7.70.027 под управлением Windows 10.
С помощью компоненты HTTP_Async можно сначала послать несколько запросов к сайтам, веб-сервисам (в т.ч. к HttpSrv7), а затем обрабатывать данные по мере их поступления.
Компонента GISMT в дополнение к HTTP_Async имеет функцию цифровой подписи и, таким образом, имеет все возможности для работы с API ГИС МТ "Честный знак" непосредственно из среды 1С 7.7
HTTP сервер
Позволяет запускать HTTP или HTTPS сервер на любом порту.
Протокол HTTPS работает с библиотекой OpenSSL версии 1.0.2 и поддерживает TLS v1.2.
Каждый входящий HTTP-запрос обрабатывается в отдельном потоке. Все запросы регистрируются в общем массиве, размер которого можно устанавливать программно. Каждому запросу для обработки в 1С присваивается числовой идентификатор (ИД). По окончании обработки запрос удаляется из массива.
В зависимости от программных настроек сервера часть запросов может обрабатываться компонентой без участия 1С.
При регистрации запроса (обрабатываемого в 1С) в глобальном модуле 1С вызывается процедура «ОбработкаВнешнегоСобытия», в которую передается ИД нового запроса. Для обработки запросы можно выбирать по-конкретному ИД или последовательно перебирая все.
Можно передавать обработку запросов другим экземплярам 1С, созданным как OLE-объекты. Для этого серверу передается имя файла, в который будет выгружен ответ, и время его ожидания. В OLE-экземпляр 1С передается также имя файла-результата и все необходимые параметры запроса. OLE- экземпляр формирует ответ и выгружает его в указанный файл. Как только файл ответа появляется, сервер передает его HTTP-клиенту и удаляет запрос из массива.
Методы объекта AddIn.HTTPSrv7:
Старт(<Порт>, <HTTPS> ) – запускает работу сервера
Стоп() – прекращает работу сервера.
Запрос (<ИД>) – устанавливает запрос с указанным ИД в качестве «текущего». Все команды работы с запросом, чтение и изменение его свойств, работа с ответом выполняются по отношению к «текущему» запросу.
ЗапросВФайл (<ИмяФайла>) – сохраняет содержание (тело) запроса в файл.
УстановитьЗаголовок (<ИмяЗаголовка>,<Содержание>) – устанавливает HTTP-заголовок ответа на текущий запрос.
ДобавитьКуки (<Имя>,<Значение>) – добавляет в ответ HTTP-заголовок «Set-Cookie» с содержанием Имя=Значение.
Передать (<Ответ>, <Код>) – передает ответ с установленными ранее заголовками.
ПередатьФайл (<ИмяФайла>, <Таймаут>) – передает в качестве тела ответа содержимое файла.
Utf8ToAnsi (<Стр>) – конвертирует строку из кодировки Utf8 в ANSI.
AnsiToUtf8 (<Стр>) – конвертирует строку из кодировки ANSI в Utf8.
Свойства объекта AddIn.HTTPSrv7 (доступ: чтение+запись):
ДлинаОчереди – максимальное количество одновременно обрабатываемых запросов.
ФайлСерт – имя файла сертификата HTTPS-сервера.
ФайлКлюча – имя файла секретного ключа HTTPS-сервера
ФайлИндекс – имя файла, который будет передаваться компонентой (без обработки в 1С) в ответ на запрос без дополнительных атрибутов (URL = «\»).
КаталогОтправки – корневой каталог для передачи запрашиваемых файлов компонентой без обработки в 1С.
ФайлТипов – имя файла Mime – типов. Файл служит для автоматического формирования заголовков «Content-Type» при автоматической передаче файлов.
ЛогФайл – имя лог-файла..
ТелоОтвета – содержание ответа на текущий запрос
Свойства объекта AddIn.HTTPSrv7 (доступ: чтение):
Активен – число, 1 – сервер активен (запущен), 0 – сервер не активен
HTTPS – протокол сервера: 1 - HTTPS, 0 – HTTP
Порт – порт сервера
ИД – ИД текущего запроса
HTTP – версия HTTP запроса
Метод – метод запроса (GET, POST и т.п.)
Хост – часть строки запроса формата «Адрес:Порт».
.URL – url запроса
Путь – левая часть url, путь к запрашиваемому ресурсу
Параметры – правая часть url, параметры и их значения
АдресКлиента – IP-адрес HTTP-клиента, от которого поступил запрос
ЗаголовкиЗапроса – названия и содержания всех заголовков запроса
КукиЗапроса – имена и значения всех Cookie запроса
ПоляФормыЗапроса – имена и значения данных формы клиента, переданных в теле запроса
ЗагруженныеФайлы –информация о файлах (файле), прикрепленных к полям (полю) формы клиента
ДлинаЗапроса – размер тела текущего запроса в байтах
ТелоЗапроса – тело текущего запроса
Ошибка – последняя ошибка
HTTP асинхронный клиент
Позволяет асинхронно работать с веб-сервисами по протоколу HTTP или HTTPS и использовать любые методы передачи: GET, POST, PUT, DELETE, OPTIONS.
Протокол HTTPS работает с библиотекой OpenSSL версии 1.0.2 и поддерживает TLS v1.2.
Поддерживается автоматическая распаковка данных сжатых в формате «gzip».
Имеется функция перевода строк JSON во вложенные объекты 1С 7.7 типа «СписокЗначений».
Все переданные запросы получают уникальные идентификаторы и сохраняются в массиве. В любой момент времени можно:
- проконтролировать состояние любого запроса,
- время его работы,
- получить в случае готовности его результаты, а также завершить его работу, после чего запрос из массива удаляется.
Методы объекта AddIn. HTTP_Async:
Новый (<URL>, <Метод>, <ФайлПриемник>) – новый запрос.
УстановитьЗаголовокЗапроса (<ИмяЗаголовка>,<Содержание>) – устанавливает HTTP-заголовок нового запроса.
Обработать (<Строка>) – отправка нового запроса и помещение его в массив, тело запроса -строка. Возвращает ИД запроса.
ОбработатьФайл (<ИмяФайла>) – отправка нового запроса и помещение его в массив, тело запроса –содержимое файла. Возвращает ИД запроса.
Запрос (<ИД>) – ищет в массиве и устанавливает в качестве текущего запрос с указанным ИД, если нет то ищет следующий по величине ИД, если нет то возвращает 0.
ПолучитьОтвет((<ОжиданиеСек>) – проверяет в массиве и возвращает список ИД запросов, завершивших работу успешно или с ошибкой. При отсутствии ожидает их появления в течении ОжиданиеСек. Упрощает обработку асинхронных запросов (подробнее в файле "Функционал HTTP_Async_0_1_1.html")
КоличествоЗаголовковОтвета () – количество заголовков в ответе сервера.
ПолучитьЗаголовокОтвета(<НомерЗаголовка>) – получает один из заголовков ответа.
ОтветВФайл (<ИмяФайла>) – сохраняет «тело» ответа в указанный фай.
Завершить (<ИД1>,<ИД2> ) – завершает работу и удаляет из массива запросы с величиной ИД от ИД1 до ИД2. Если ИД2 не указан, то завершает только ИД1. Если не указаны оба значения то завершает все запросы. Возвращает количество завершенных запросов.
СтартЛог (<ИмяФайла >) – старт вывода сообщений в лог-файл.
СтопЛог () – прекращение вывода сообщений в лог-файл.
Utf8ToAnsi (<Стр>) – конвертирует строку из кодировки Utf8 в ANSI.
AnsiToUtf8 (<Стр>) – конвертирует строку из кодировки ANSI в Utf8.
FromJson (<Стр>) – «парсит» строку JSON, преобразуя структуру объектов и массивов JSON в структуру из вложенных «СписковЗначений» - объектов 1С 7.7. Конечные значения 2-х типов: строка и число.
Свойства объекта AddIn. HTTP_Async (свойства клиента):
ПоследняяОшибка – строка, текст ошибки после выполнения синхронных методов.
КоличествоЗапросов– число запросов в массиве.
Свойства объекта AddIn. HTTP_Async ( текущего запроса):
ИД – ИД запроса. Если 0, то текущий запрос не выбран.
URL– URL текущего запроса.
ФайлПриемник – имя файла, указанное ранее в методе Новый().
Состояние– число: 1 – отправка запроса, 2- получение ответа, 3- разархивирование, 4-ответ получен, -1 - ошибка.
Принято – общее количество принятых байт, можно отслеживать и в процессе получения ответа.
ВремяМСек – количество миллисекунд с начала передачи запроса.
СтрокаСостоянияОтвета– код и текст ответа сервера по HTTP-протоколу.
ДлинаОтвета– размер «тела» ответа в байтах.
Ответ– строка, «тело» ответа.
Ошибка – строка, текст ошибки в случае состояния запроса -1.
Клиент ГИС МТ "Честный знак"
Включает в себя объекты: Addin.HTTP_Async (описанный выше) и Addin.GISMT
Дополнительно к полной функциональности HTTP_Async позволяет выбрать сертификат цифровой подписи из личного хранилища сертификатов и сформировать цифровую подпись в формате Base64, как того требует "True API" ГИС МТ "Честный знак".
Методы ПолучитьКлючСессии() и ПолучитьДокументы() разработаны согласно "Описанию True API" ГИС МТ версии 354.0 (по состоянию на 1.03.2024г).
Свойства объекта Addin.GISMT:
КоличествоСерт – число, количество сертификатов ключей цифровой подписи, в личном хранилище сертификатов текущего пользователя ОС Windows.
ПоследняяОшибка – строка, текст последней ошибки при выполнении методов компоненты.
КлючСессии – строка, токен, полученный в результате успешного выполнение метода "ПолучитьКлючСессии".
Методы объекта Addin.GISMT:
Сертификат (<Номер>) – получение сведений о сертификате ключа цифровой подписи, хранящемся в личном хранилище сертификатов текущего пользователя ОС Windows.
Подписать (<Данные>, <НомерСерт>, <Прикрепленная> ) – создает цифровую подпись в формате Base64.
ПолучитьКлючСессии (<НомерСерт>) – отправляет необходимые запросы с использованием цифровой подписи к серверу ГИС МТ для получения ключа сессии.
ПолучитьДокументы ( <НачДата>, <КонДата>, <ТовГруппа> ) – получает список загруженных документов в ГИС МТ в виде строки формата JSON.
Бесплатные демо-версии
Демо-конфигурация с демо-обработками и демо-компонентами доступны для бесплатного скачивания в разделе «Бесплатные файлы».
Ограничения demo-версий библиотек *.dll:
- объект Addin.HTTPSrv7 действует только в пределах localhost;
- объект Addin.HTTP_Async действует только в пределах localhost;
- у объекта Addin.GISMT не работает метод Подписать;
- у объекта Addin.GISMT свойство КлючСессии по чтению и записи не доступно.
Вид демо-обработки после запуска HTTP-сервера кнопкой «Старт» - «HTTP порт 3000»:
Пример обработки запроса компонентой (без обработки в 1С):
Набираем в браузере http://localhost:3000/, компонента передает в браузер файл demo.html
Пример обработки запроса в 1С:
Кликаем в браузере по кнопке «Подтверждение», обработка формирует ответ из элементов запроса и передает его в браузер:
Пример обработки запроса в OLE- экземпляре 1С:
Подключаем OLE-экземпляр текущей конфигурации. Нажимаем кнопку «Подключить» - «Демо»
Нажимаем в браузере «Обновить»
Пример «ручной» обработки запроса в 1С:
Нажимаем кнопку «Отключить» - отключаем OLE-экземпляр 1С.
Устанавливаем в обработке флажок «Ручная обработка запросов».
Нажимаем в браузере «Обновить».
В обработке кликаем по ИД запроса, появившегося в списке «Запросы в очереди».
В окне «Ввод значения» набираем «Привет!»:
Нажимаем «ОК».
Видим в браузере результат:
Демо-обработка HTTP_Async
Проверим работу асинхронного клиента, а заодно и производительность HTTP-сервера 1С. Для этого отправим сразу 50 запросов и проверим время получения ответов.
Запускаем 2 демо-конфигурации. В одной запускаем обработку-сервер в другой – обработку-клиент:
В клиенте нажимаем кнопку «Старт запросов», дожидаемся окончания обработки запросов. Результат в таблице клиента:
Итоги:
1) 50 запросов отправлено в течении 24 миллисекунд;
2) Все запросы обработаны в течении менее 5 секунд;
3) 3 запроса завершены с ошибкой;
4) 47 запросов завершены успешно, время выполнения каждого запроса от 0.466 до 4.108 сек.
Обработка демонстрирует процедуры:
- выбор сертификата из личного хранилища для получения токена ГИС МТ;
- получение ключа сессии (токена) ГИС МТ;
- получение и просмотр списка документов организации, загруженных в ГИС МТ.
Для выбора сертификата нажмите "Сертификат" и выберите нужный из списка.
Для получения ключа сессии нажмите "Ключ сессии".
Для просмотра документов установите период для отбора документов по их дате, выберите товарную группу и нажмите "Получить список документов".
Основные реквизиты документов из полученного списка будут показаны в следующем виде:
История изменения версий
HttpSrv7
Версия 0.1.0.0
- Отменена блокировка файла при передаче его клиенту. Возможна передача файла параллельно нескольким клиентам.
- Устранен сбой сервера при получении запроса с неправильным заголовком "Content-length".
Версия 0.2.0.0
- Добавлен метод "ДобавитьКуки" и свойство "КукиЗапроса".
Версия 0.2.1.0
- Добавлено свойство "ПоляФормыЗапроса".
Версия 0.2.2.0
- Добавлено свойство "ЗагруженныеФайлы".
История изменения версий HTTP_Async
Версия 0.1.0.0
- Добавлен метод "ПолучитьОтвет" и свойство "URL".
Версия 0.1.1.0
- Добавлен параметр "ОжиданиеСек" в метод "ПолучитьОтвет".
Версия 0.2.0.0
- Оптимизировано использование оперативной памяти.
Версия 0.2.1.0
- Исправлена ошибка дублирования заголовков запроса.
История изменения версий GISMT
Версия 0.1.0.0
- Включает HTTP_Async версии 0.2.1.0.