HTTP соединение для конфигурации в режиме совместимости 8.2
Есть конфигурация на платформе 8.3.18, работающая в режиме совместимости 8.2.16 (повысить режим совместимости в рабочей базе нельзя)
Нужно организовать обмен с сайтом:
Ответ возвращает ошибку (Код состояния: 400).
Если копию базы перевести в режим совместимости 8.3.6 - работает. (Код состояния: 200).
Вопрос: как можно обойти эту проблему?
Нужно организовать обмен с сайтом:
ТаймаутУстановкиСоединения =0;
ЗащищенноеСоединениеOpenSSL = Новый ЗащищенноеСоединениеOpenSSL();
HTTPСоединение = Новый HTTPСоединение(АдресСервера,,,,, ТаймаутУстановкиСоединения, ЗащищенноеСоединениеOpenSSL);
Заголовки = Новый Соответствие;
Заголовки.Вставить("Content-Type", "application/json");
Заголовки.Вставить("Accept", "application/json; utf-8;");
Заголовки.Вставить("Accept-Charset","utf-8;");
ТелоЗапроса = "{
|""organisationId"": ""1199df06-1583-16ff-e841-011022ee2280"",
|""organisationName"": ""Рога и Копыта"",
|""versionPlugin"": ""1.0.1.0"",
|""integrationSoftName"": ""УправлениеВсемиУправлениями"",
|""versionIntegrationSoft"": ""1.1.1.1""
|}";
HTTPЗапрос = Новый HTTPЗапрос(АдресРесурса);
Для Каждого ЭлементЗаголовка Из Заголовки Цикл
HTTPЗапрос.Заголовки.Вставить(ЭлементЗаголовка.Ключ, ЭлементЗаголовка.Значение);
КонецЦикла;
HTTPЗапрос.УстановитьТелоИзСтроки(ТелоЗапроса);
HTTPОтвет = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
Сообщить("Код состояния: "+HTTPОтвет.КодСостояния);
ПоказатьОтвет возвращает ошибку (Код состояния: 400).
Если копию базы перевести в режим совместимости 8.3.6 - работает. (Код состояния: 200).
Вопрос: как можно обойти эту проблему?
По теме из базы знаний
- Выгрузка-загрузка любых данных из 1С (и измененных) в XML между похожими конфигурациями (ФАЙЛ, HTTP, COM) ЛЮБЫХ баз 1С 8.1-8.3 с обработкой и поиском данных по произвольным полям поиска
- Универсальная процедура по загрузке файла из интернета
- Обмен с системой Меркурий через Web + Ветис.API для любых конфигураций (универсальная конфигурация Хамелеон Меркурий)
- Универсальный обмен между идентичными конфигурациями через REST интерфейс OData. Часть І: Справочники
- Эволюция расширения конфигурации
Найденные решения
Попробуй сделать через winhttprequest
типа (просто кусок из своей обработки выдернул):
Если так заработает - то предположу что проблема с ssl сертификатом. Тогда 2 варианта: или оставить вот так вот через WinHttpRequest, либо если через объекты 1С делать (HTTPСоединение и т.д.) - то необходимо будет добавить нужный сертификат в cacert.pem.
типа (просто кусок из своей обработки выдернул):
ОтветСервера = "";
Попытка
WinHttpReq = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");
WinHttpReq.Option(2, "utf-8");
WinHttpReq.Open("POST", мМестоположениеWSDL + ПараметрЗапроса, 0);
WinHttpReq.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
WinHttpReq.Send(ДанныеЗапросаСтрокой);
ОтветСервера = Строка(WinHttpReq.ResponseText());
WinHttpReq = Неопределено;
Исключение
ОбщегоНазначения.СообщитьОбОшибке(ОписаниеОшибки());
КонецПопытки;
ПоказатьЕсли так заработает - то предположу что проблема с ssl сертификатом. Тогда 2 варианта: или оставить вот так вот через WinHttpRequest, либо если через объекты 1С делать (HTTPСоединение и т.д.) - то необходимо будет добавить нужный сертификат в cacert.pem.
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Это ж в принципе недопустимо для такой версии платформы:
https://capitally.ru/1c-development/ispolzovanie-http-servisov-v-rezhime-sovmestimosti-8-3-4-i-nizhe-nedopustimo/
Извините, скинул пример по http-сервису, вот пример по соединению, опять же 8.2.16 еще не поддерживает полноценно соединения
https://stimul.kiev.ua/materialy.htm?a=primer_raboty_s_httpsoedinenie
Попробуй сделать через winhttprequest
типа (просто кусок из своей обработки выдернул):
Если так заработает - то предположу что проблема с ssl сертификатом. Тогда 2 варианта: или оставить вот так вот через WinHttpRequest, либо если через объекты 1С делать (HTTPСоединение и т.д.) - то необходимо будет добавить нужный сертификат в cacert.pem.
типа (просто кусок из своей обработки выдернул):
ОтветСервера = "";
Попытка
WinHttpReq = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");
WinHttpReq.Option(2, "utf-8");
WinHttpReq.Open("POST", мМестоположениеWSDL + ПараметрЗапроса, 0);
WinHttpReq.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
WinHttpReq.Send(ДанныеЗапросаСтрокой);
ОтветСервера = Строка(WinHttpReq.ResponseText());
WinHttpReq = Неопределено;
Исключение
ОбщегоНазначения.СообщитьОбОшибке(ОписаниеОшибки());
КонецПопытки;
ПоказатьЕсли так заработает - то предположу что проблема с ssl сертификатом. Тогда 2 варианта: или оставить вот так вот через WinHttpRequest, либо если через объекты 1С делать (HTTPСоединение и т.д.) - то необходимо будет добавить нужный сертификат в cacert.pem.
(9)
Ответ сервера: {"response":{"status":"1","message":"Registration update."}}
В отладчике WinHttpReq.Status = 200
Спасибо
Попытка
WinHttpReq = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");
WinHttpReq.Option(2, "utf-8");
WinHttpReq.Open("POST", "https://"+АдресСервера + "/" + АдресРесурса, 0);
WinHttpReq.setRequestHeader("Content-Type", "application/json");
WinHttpReq.setRequestHeader("Accept", "application/json; utf-8;");
WinHttpReq.setRequestHeader("Accept-Charset", "utf-8;");
WinHttpReq.Send(ТелоЗапроса);
ОтветСервера = WinHttpReq.ResponseText();
WinHttpReq = Неопределено;
Сообщить("Ответ сервера: "+ОтветСервера);
Исключение
ОбщегоНазначения.СообщитьОбОшибке(ОписаниеОшибки());
КонецПопытки;
ПоказатьОтвет сервера: {"response":{"status":"1","message":"Registration update."}}
В отладчике WinHttpReq.Status = 200
Спасибо
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот