HTTP соединение для конфигурации в режиме совместимости 8.2

1. dehro 5 03.11.21 10:51 Сейчас в теме
Есть конфигурация на платформе 8.3.18, работающая в режиме совместимости 8.2.16 (повысить режим совместимости в рабочей базе нельзя)

Нужно организовать обмен с сайтом:

	ТаймаутУстановкиСоединения =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).

Вопрос: как можно обойти эту проблему?
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
9. shurikvz 03.11.21 22:31 Сейчас в теме +1 $m
Попробуй сделать через winhttprequest

типа (просто кусок из своей обработки выдернул):
	ОтветСервера = "";
	
	Попытка
		
		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.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
7. пользователь 03.11.21 16:46
Сообщение было скрыто модератором.
...
2. GeraltSnow 172 03.11.21 10:58 Сейчас в теме
У 8.2 проблемы с шифрованием SSL. Воспользуйся программой Stunnel.
3. dehro 5 03.11.21 12:00 Сейчас в теме
(2) Если тело запроса пустое: ошибки нет. Результат приходит.
4. starik-2005 3040 03.11.21 14:13 Сейчас в теме
5. Sekator 03.11.21 14:44 Сейчас в теме
8. dehro 5 03.11.21 18:25 Сейчас в теме
(5)Так я знаю это. Мне интересно как обойти? Внешняя компонента или ещё что-нибудь. День гуглил, ничего вменяемого не нашёл.
6. Sekator 03.11.21 14:50 Сейчас в теме
Извините, скинул пример по http-сервису, вот пример по соединению, опять же 8.2.16 еще не поддерживает полноценно соединения

https://stimul.kiev.ua/materialy.htm?a=primer_raboty_s_httpsoedinenie
9. shurikvz 03.11.21 22:31 Сейчас в теме +1 $m
Попробуй сделать через winhttprequest

типа (просто кусок из своей обработки выдернул):
	ОтветСервера = "";
	
	Попытка
		
		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.
11. dehro 5 04.11.21 10:15 Сейчас в теме
(9)
   
    Попытка
        
		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

Спасибо
10. Aitbay 04.11.21 07:33 Сейчас в теме
порт какой используется?
443? явно указать пробовали?
сервис опубликован на https?
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот