Новое в версии 2020.2.2
В версии 2020.2.2 мы реализовали поддержку протокола SSH, реализовали выборочное кодирование URL адреса в ЗапросHttp, а также реализовали новую настройку при чтении XML и исправили ошибки.
Работа с SSH
Мы реализовали поддержку протокола SSH. Протокол SSH широко используется для администрирования серверов и отдельных сервисов. По сути, через этот протокол можно получить доступ к консоли удаленного сервера.
Также мы реализовали поддержку протокола SFTP, предназначенного для выполнения операций с файлами (копирования и т. п.) поверх надежного и безопасного соединения.
Для поддержки SSH мы добавили в библиотеку объектов ряд новых типов:
-
СоединениеSsh: предоставляет интерфейс для взаимодействия по протоколу SSH. Объект этого типа вы можете получить с помощью одного из конструкторов;
-
КонсольSsh: предоставляет интерфейс для взаимодействия с удаленной консолью, с помощью которой можно выполнять произвольный набор команд. Объект КонсольSsh возвращается методом СоединениеSsh.ОткрытьКонсоль().
-
СоединениеSftp: предоставляет интерфейс для взаимодействия с сервером по протоколу SFTP. Объект СоединениеSftp возвращается методом СоединениеSsh.ОткрытьСоединениеSftp().
Теперь, с появлением поддержки SSH, вы можете использовать режим агента Конфигуратора из «1С:Исполнителя».
Пример работы с файлами:
метод ЗагрузитьФайл(Файл: Строка | Файл)
исп Соединение = новый СоединениеSsh("192.168.0.3", , "user", "password")
исп Фтп = Соединение.ОткрытьСоединениеSftp()
Фтп.УстановитьТекущийКаталог("/tmp/")
Фтп.Записать(Файл)
;
Пример работы с конфигуратором в режиме агента:
метод ВыгрузитьКонфигурацию(Файл: Строка | Файл)
исп СоединениеАгент = новый СоединениеSsh("192.168.0.3", 1543, "admin", "123")
исп Агент = СоединениеАгент.ОткрытьКонсоль()
Агент.СтрокаПриглашения = "designer> "
Агент.Выполнить("common connect-ib")
Агент.Выполнить("config dump-cfg --file=configuration.dmp", 1м)
исп СоединениеСфтп = новый СоединениеSsh("192.168.0.3", 1543, "admin", "123")
исп Сфтп = СоединениеСфтп.ОткрытьСоединениеSftp()
Сфтп.Получить("configuration.dmp", Файл)
Сфтп.Удалить("configuration.dmp")
;
Пример использования SSH туннеля:
метод ПодключениеЧерезТуннель()
знч Настройки = новый НастройкиСоединенияSsh()
Настройки.УстановитьПароль("12345")
Настройки.ПеренаправлениеЛокальногоПорта(1543, "192.168.0.3", 1543)
исп СоединениеТуннель = новый СоединениеSsh("212.212.212.212", , "user", Настройки)
исп СоединениеАгент = новый СоединениеSsh("127.0.0.1", 1543, "admin", "123")
исп Агент = СоединениеАгент.ОткрытьКонсоль()
Агент.СтрокаПриглашения = "designer> "
Консоль.Записать(Агент.Выполнить("-v").ПрочитатьКакТекст())
;
Работа с HTTP
Кодирование URL адреса в ЗапросHttp
В ЗапросHttp мы реализовали выборочное кодирование недопустимых символов, содержащихся в адресе запроса. Теперь, если адрес запроса содержит смесь процент-кодированных и недопустимых символов, процент-кодированные символы будут сохранены, а недопустимые символы — закодированы, с использованием процент-кодирования или IDN-кодирования. Подробнее.
В результате запрос будет успешно выполнен. Ранее выполнение запроса с подобным адресом завершалось исключением.
Примеры процентного кодирования:
Исходный адрес запроса Адрес запроса после преобразований: пробел и обратный слеш были закодированы |
https://yandex.ru/maps%2F%3Ftest1%2Ftest 2%5Ctest3\test4 https://yandex.ru/maps%2F%3Ftest1%2Ftest%202%5Ctest3%5Ctest4 |
Исходный адрес запроса Адрес запроса после преобразований: текст не изменился, т. к. после процента допустимый код символа |
http://test.ru/search=aa%2Faa http://test.ru/search=aa%2Faa |
Исходный адрес запроса Адрес запроса после преобразований: процент был закодирован |
http://test.ru/search=100% http://test.ru/search=100%25 |
Пример IDN-кодирования:
Исходный адрес Адрес после преобразования |
http://яндекс.рф http://xn--d1acpjx3f.xn--p1ai |
Работа с JSON
Ошибка десериализации JSON
Исправлена ошибка десериализации JSON целиком, которая возникала при обработке значений null внутри соответствий, массивов и других объектов. Теперь null корректно читается в Неопределено.
Ранее, например, чтение такого файла приводило к исключению «Внутренняя ошибка чтения JSON»:
{
"id": "739c5e0f-3afe-4336-8cdf-019ae667fd91",
"status": "initiating",
"name": "Test agent a4dae654-e19a-428a-bf49-84464097433a RB",
"workSeatCount": 0,
"diskQuota": 0,
"deleted": false,
"activeTasks": [
{
"id": "a2ab1902-5e16-462f-8404-ed49bd9921e4",
"type": "create",
"status": "AWAITING",
"createTime": "2020-08-13T14:41:55.618+0000",
"startTime": null,
"endTime": null,
"timeout": null,
"updateTime": null,
"errorCode": null,
"errorMessage": null,
"properties": null
}
],
"properties": []
}
Работа с XML
Новая настройка ЗаменятьСсылкиНаСущность
Для типа НастройкиЧтенияXml мы реализовали новую настройку — ЗаменятьСсылкиНаСущность. Она определяет, требуется ли разрешать ссылки на сущности на их текстовое представление. Стандартно эта настройка выключена (Ложь). Таким образом при чтении XML секции DTD и внешние сущности не обрабатываются.
Это изменение нарушает обратную совместимость: ранее по умолчанию обработка DTD была включена, а возможность настройки отсутствовала. Поэтому, если при чтении XML вы хотите иметь прежнее поведение, установите НастройкиЧтенияXml.ЗаменятьСсылкиНаСущность в значение Истина.
Прочее
Ошибка при возврате errorlevel
Мы исправили ошибку, которая заключалась в том, что «1С:Исполнитель» не возвращал errorlevel в случае завершения с ошибкой в ОС Windows. Например, в результате выполнения такого скрипта возвращался код ошибки 0, хотя должен был вернуться код ошибки 255.
метод Скрипт()
выбросить новый ИсключениеНедопустимоеСостояние("Ошибка")
;
Теперь возвращается правильный код ошибки.