Вход | Регистрация

1С:Предприятие ::

Метки: 

1C отправка PUT запроса в формате JSON

Я
   RECEIVER
 
15.09.18 - 11:24
Добрый день.
Столкнулся с проблемой отправки PUT запроса из 1С (8.3.10.2667) с полезными данными JSON, GET и POST запросы работают корректно, все считывается и отправляется. При отправке PUT почему то пустой запрос. Вот код:

     ИмяФайлаОтвета = ПолучитьИмяВременногоФайла();
          ИмяФайлаЗапроса    = ПолучитьИмяВременногоФайла();
      
     ЗаписьJSON = Новый ЗаписьJSON;
           ЗаписьJSON.ОткрытьФайл(ИмяФайлаЗапроса);                  
     СтуктураОперации = Новый Структура;

     СтуктураОперации.Вставить("type_id", 0);
     СтуктураОперации.Вставить("name", РазбитьФИО(документ.заказчик,2));
     СтуктураОперации.Вставить("last_name", РазбитьФИО(документ.заказчик,1));
     СтуктураОперации.Вставить("middle_name", РазбитьФИО(документ.заказчик,3));

     ЗаписатьJSON(ЗаписьJSON, СтуктураОперации);
     ЗаписьJSON.Закрыть();     
     ФайлОтправки = Новый Файл(ИмяФайлаЗапроса);
     РазмерФайлаОтправки = XMLСтрока(ФайлОтправки.Размер());

          ИмяСервера = "мой сервер";
     URL = "/client";
            
     ЗаголовокHTTP = Новый Соответствие;
           ЗаголовокHTTP.Вставить("Host", ИмяСервера);
           ЗаголовокHTTP.Вставить("Connection", "Keep-Alive");
           ЗаголовокHTTP.Вставить("Accept", "application/json");
           ЗаголовокHTTP.Вставить("Authorization", "Мой токен");
           ЗаголовокHTTP.Вставить("Content-Length", РазмерФайлаОтправки);
          ЗаголовокHTTP.Вставить("Content-Type", "application/json; charset=utf-8");    

      
     Соединение = Новый HTTPСоединение(ИмяСервера,,,,,,Новый                     

ЗащищенноеСоединениеOpenSSL(Новый СертификатКлиентаWindows(),Новый                     

СертификатыУдостоверяющихЦентровWindows()));       

          ЗапросHTTP = Новый HTTPЗапрос(URL, ЗаголовокHTTP);         
     ЗапросHTTP.УстановитьИмяФайлаТела(ИмяФайлаЗапроса);         
     Ответ = Соединение.Записать(ЗапросHTTP);   


Вот что видно отправляется через снифер на сайт на самом деле:
PUT /client HTTP/1.1
Host: -----
User-Agent: 1C+Enterprise/8.3
Authorization: "мой токен"
Content-Type: application/json; charset=utf-8
Connection: Keep-Alive
Accept: application/json
Expect: 100-continue
Content-Length: 0



А вот что должно (по примеру POST) который работает исправно через Соединение.ОтправитьДляОбработки(ИмяФайлаЗапроса, URL, ИмяФайлаОтвета, ЗаголовокHTTP)

К тому же почему то приписывается заголовок Expect: 100-continue...

POST /client HTTP/1.1
Host: -----
User-Agent: 1C+Enterprise/8.3
Authorization: "мой токен"
Content-Type: application/json; charset=utf-8
Connection: Keep-Alive
Accept: application/json
Content-Length: 247

{
"type_id": 1,
"name": "Николай",
"last_name": "Сверидонов",
"middle_name": "Валентинович",
}


Помогите разобраться.
 
 
   Cyberhawk
 
1 - 15.09.18 - 11:40
Content-Length не устанавливай
   RECEIVER
 
2 - 15.09.18 - 15:40
Пробовал. Не выходит. Вообщем с      Соединение = Новый HTTPСоединение(ИмяСервера,,,,,,Новый                     

ЗащищенноеСоединениеOpenSSL(Новый СертификатКлиентаWindows(),Новый                     

СертификатыУдостоверяющихЦентровWindows())); 

Не работает, всегда пустое тело отправляет. Если через HTTPМетод("PUT") отправлять тоже самое. 
Получается только через  HTTPМетод("PUT ") - с ПРОБЕЛОМ.

а WINHTTP работает почему то, пришлось так и оставить.
GET и POST через HTTPСоединение(ИмяСервера,,,,,,Новый                     

ЗащищенноеСоединениеOpenSSL(Новый СертификатКлиентаWindows(),Новый                     

СертификатыУдостоверяющихЦентровWindows())); 

а PUT через WINHTTP. Видимо, какой то косяк в конкретной платформе. На другой не пробовал к сожалению.
   Fram
 
3 - 15.09.18 - 20:03
(2) ну сравни фидлером чем отличаются запросы 1с и winhttp?


Список тем форума
Рекламное место пустует Рекламное место пустует
Здесь во втором сообщении вам дадут решение, а в двадцатом дадут правильное решение. Ymryn
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует