OneScript icon indicating copy to clipboard operation
OneScript copied to clipboard

Ошибка создания ЗащищенноеСоединениеOpenSSL

Open AA-KLex opened this issue 2 years ago • 14 comments

Опишите ошибку При создании защищённого соединения возникает ошибка.

Воспроизведение ошибки При выполнении строки кода: Соединение = Новый HTTPСоединение(Адрес,,,,,, Новый ЗащищенноеСоединениеOpenSSL);

Возникает ошибка: ScriptEngine.Machine.RuntimeException: {Модуль C:\Program Files (x86)\TurboConf\user_scripts\TurboTrackerEva.os / Ошибка в строке: 18 / Конструктор не найден (ЗащищенноеСоединениеOpenSSL)} Соединение = Новый HTTPСоединение(Адрес,,,,,, Новый ЗащищенноеСоединениеOpenSSL); ---> ScriptEngine.Machine.RuntimeException: {Модуль / Ошибка в строке: -1 / Тип не зарегистрирован (ЗащищенноеСоединениеOpenSSL)}

Ожидаемое поведение Создаётся соединение без ошибок. При запуске этого же кода в 1С Предприятие ошибки не возникает.

Окружение

  • ОС: Windows
  • Версия: 10
  • 1С:Предприятие 8.3 (8.3.22.1923)

AA-KLex avatar Dec 11 '23 14:12 AA-KLex

В 1Скрипт делается по другому. Указываете в адресе протокол https:// и все будет работать. Т.е. объект ЗащищенноеСоединениеOpenSSL не реализован за ненадобностью.

Адрес должен быть не my.server.com, а https://my.server.com

EvilBeaver avatar Dec 11 '23 14:12 EvilBeaver

Но наверное, имело бы смысл и реализовать, для совместимости.

EvilBeaver avatar Dec 11 '23 14:12 EvilBeaver

Спасибо, сработало, но не до конца. Соединение установилось, но при отправке запроса на обработку сайт возвращает необходимость авторизации. Прошу подсказать ещё, что в коде ниже может работать не так, как в 1С:Предприятие. ещё раз, строка Ответ.ПолучитьТелоКакСтроку() возвращает html страницу с запросом пароля, в 1С:Предприятие она же возвращает ответ на запрос.

Соединение	= Новый HTTPСоединение(Адрес);
Заголовки	= Новый Соответствие;
Заголовки.Вставить("Content-Type", "application/json");
Заголовки.Вставить("Authorization", Токен);

Фильтры	= Новый Массив;
ФильтрПользователь	= Новый Массив;
ФильтрПользователь.Добавить("responsible.login");
ФильтрПользователь.Добавить("==");
ФильтрПользователь.Добавить(Логин);
Фильтры.Добавить(ФильтрПользователь);
Фильтры.Добавить(СтрРазделить("cache_status_type == IN_PROGRESS", " "));

Аргументы	= Новый Структура("filter", Фильтры);
СтруктураЗапроса	= Новый Структура("jsonrpc, method, kwargs", "2.2", "CmfTask.list", Аргументы);
ПараметрыJSON	= Новый ПараметрыЗаписиJSON;
ЗаписьJSON	= Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку(ПараметрыJSON);
ЗаписатьJSON(ЗаписьJSON, СтруктураЗапроса);
ЗапросJSON = ЗаписьJSON.Закрыть();
Запрос	= Новый HTTPЗапрос("/", Заголовки);
Запрос.УстановитьТелоИзСтроки(ЗапросJSON);
Ответ	= Соединение.ОтправитьДляОбработки(Запрос);
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку());
Данные = ПрочитатьJSON(ЧтениеJSON, Ложь);

AA-KLex avatar Dec 12 '23 06:12 AA-KLex

Надо снять снифером полностью http-запрос, который шлет 1С и который шлет 1Скрипт и сравнить чем они отличаются. Например, через https://www.telerik.com/fiddler или https://www.nirsoft.net/utils/http_network_sniffer.html

Скорее всего разница будет или в кодировках русских букв, или в добавляемых 1С-кой каких-то еще заголовках

EvilBeaver avatar Dec 12 '23 07:12 EvilBeaver

@AA-KLex Попробуйте воспользоваться библиотекой 1connector (https://github.com/vbondarevsky/1connector) она берет на себя много низкоуровневых вещей. Возможно, у вас там редиректы приходят и 1С их сама обрабатывает... Без дампов http мне сложно сказать. Попробуйте через 1connector

EvilBeaver avatar Dec 12 '23 07:12 EvilBeaver

Получил пакеты, в каждом из которых сделал по два запроса. Различия и сами пакеты прилагаю. 1connector ещё не пробовал.

Пакеты, отправляемые OneScript image image image

Пакеты, отправляемые 1С image image image

Исходники пакетов Исходники.zip

AA-KLex avatar Dec 12 '23 14:12 AA-KLex

А http пакеты из этого добра можно извлечь? :)

nixel2007 avatar Dec 12 '23 14:12 nixel2007

Знать бы как. Я тоже ожидал, что будет более понятно. Если речь о теле запроса и заголовках - он одинаковый, формирую его одинаковым кодом.

AA-KLex avatar Dec 12 '23 14:12 AA-KLex

То, что он в объектной технике одинаковый, не означает, что он одинаковый в raw

nixel2007 avatar Dec 12 '23 14:12 nixel2007

Ставлю на редиректы. @AA-KLex попробуйте 1connector

EvilBeaver avatar Dec 13 '23 09:12 EvilBeaver

@AA-KLex Попробуйте воспользоваться библиотекой 1connector (https://github.com/vbondarevsky/1connector) она берет на себя много низкоуровневых вещей. Возможно, у вас там редиректы приходят и 1С их сама обрабатывает... Без дампов http мне сложно сказать. Попробуйте через 1connector

@EvilBeaver Как установить 1connector если скрипт вызывается из HostedScriptEngine? То есть само приложение oscript.exe у меня отсутствует.

AA-KLex avatar Dec 13 '23 10:12 AA-KLex

@EvilBeaver Подключил 1connector - скопировал в библиотеки. Ничего не изменилось - возвращается html страничка с требованием авторизации. Напишу в поддержку Евы - может там что подскажут.

AA-KLex avatar Dec 13 '23 12:12 AA-KLex