Новое в версии 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.

метод Скрипт()
    выбросить новый ИсключениеНедопустимоеСостояние("Ошибка")
;

Теперь возвращается правильный код ошибки.