|   |   | 
| 
 | Записать в тело HTTP запроса RAW data | ☑ | ||
|---|---|---|---|---|
| 0
    
        helloman 01.07.22✎ 11:47 | 
        Задача: Коллеги, помогите разобраться, необходимо отправить в теле запроса структуру в RAW data, в Postman'e запрос работает. Из 1с возвращает ошибку - нет данных
 Структура: POST /api/********* HTTP/1.1 Host: ************* Authorization: Bearer ******************* Accept: application/json Content-Type: application/json Content-Length: 721 { "param1": "0", "param2": true, "css": true, "params": [ { "param1_1": 0, "param1_2": "t", "param1_3": 0 }, { "param2_1": 0, "param2_2": "t", "param2_3": 0 } ], "param3": "A", "param4": "B" } Проба пера: Соединение = Новый HTTPСоединение("**************", 443,,,,,Новый ЗащищенноеСоединениеOpenSSL()); АдресРесурса = "/api/*********"; ЗаголовкиHTTP = Новый Соответствие; ЗаголовкиHTTP.Вставить("Content-Type", "application/json"); ЗаголовкиHTTP.Вставить("Accept", "application/json"); ЗаголовкиHTTP.Вставить("host", "**************"); ЗаголовкиHTTP.Вставить("Authorization", "Bearer " + Токен); //Укажем длину POST-запроса Content-Length ФайлОтправки = Новый Файл(ИмяФайлаОтправки); РазмерФайлаОтправки = XMLСтрока(ФайлОтправки.Размер()); ЗаголовкиHTTP.Вставить("Content-Length", РазмерФайлаОтправки); HTTPЗапрос = Новый HTTPЗапрос(АдресРесурса,ЗаголовкиHTTP); ДанныеPOST = Новый Структура; ДанныеPOST.Вставить("param1", "0"); М = Новый Массив; ДанныеТовары = Новый Структура; ДанныеТовары.Вставить("param1_1",0); М.Добавить(ДанныеТовары); ДанныеPOST.Вставить("param3", "A"); ЗаписьJSON = Новый ЗаписьJSON; ЗаписьJSON.УстановитьСтроку(); СериализаторXDTO.ЗаписатьJSON(ЗаписьJSON, ДанныеPOST, НазначениеТипаXML.Явное); РезультатСтрока = ЗаписьJSON.Закрыть(); HTTPЗапрос.УстановитьТелоИзСтроки(РезультатСтрока, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.Использовать); | |||
| 1
    
        Kassern 01.07.22✎ 11:49 | 
        (0) какая ошибка?     | |||
| 2
    
        Kassern 01.07.22✎ 11:50 | 
        РезультатСтрока в отладчике смотрели? Совпадает с тем что надо передать?     | |||
| 3
    
        Kassern 01.07.22✎ 11:51 | 
        ЗаголовкиHTTP.Вставить("Accept", "application/json");
 ЗаголовкиHTTP.Вставить("host", "**************"); ЗаголовкиHTTP.Вставить("Content-Length", РазмерФайлаОтправки); вот это дело имхо можно вообще убрать | |||
| 4
    
        Kassern 01.07.22✎ 11:52 | 
        а где кусок кода с отправкой хттп запроса?     | |||
| 5
    
        helloman 01.07.22✎ 12:28 | 
        (4) РезультатЗапроса = Соединение.ОтправитьДляОбработки(HTTPЗапрос);     | |||
| 6
    
        helloman 01.07.22✎ 12:29 | 
        (1) 400
 {"status":"Error","message":"operation not specified","data":null} | |||
| 7
    
        helloman 01.07.22✎ 12:30 | 
        (3) Нужно, без ЗаголовкиHTTP.Вставить("Accept", "application/json"); ругается что нужна эта строка     | |||
| 8
    
        helloman 01.07.22✎ 12:32 | 
        (2) Подскажите как правильно смотреть?     | |||
| 9
    
        Kassern 01.07.22✎ 12:32 | 
        (8) Поставить точку останова после РезультатСтрока  и посмотреть в табло, что в ней хранится     | |||
| 10
    
        Kassern 01.07.22✎ 12:33 | 
        (6) Может надо передать в тело запроса так data=ВашТексJSON?     | |||
| 11
    
        helloman 01.07.22✎ 12:38 | 
        (10) В Postman это RAW, form-data получилось передать     | |||
| 12
    
        youalex 01.07.22✎ 12:39 | 
        СериализаторXDTO.ЗаписатьJSON() 
 Зачем Сериализатор? | |||
| 13
    
        helloman 01.07.22✎ 12:40 | 
        (9) Смотрел, там JSON сформировался, в POSTMAN нет JSON - просто текст.     | |||
| 14
    
        helloman 01.07.22✎ 12:43 | 
        (12) Думал над этим. Пробовал без него через файл
 ИмяФайлаОтправки = КаталогВременныхФайлов() + "post.txt"; ИмяФайлаОтвета = КаталогВременныхФайлов() + "response.txt"; ФайлОтправки = Новый ЗаписьТекста(ИмяФайлаОтправки, КодировкаТекста.ANSI, Символы.ПС, Ложь); ФайлОтправки.ЗаписатьСтроку("{"); ФайлОтправки.ЗаписатьСтроку("""param1"": ""0""," + Символы.ПС); ФайлОтправки.ЗаписатьСтроку("""params"": ["+ Символы.ПС); ФайлОтправки.ЗаписатьСтроку(" {"+ Символы.ПС); ФайлОтправки.ЗаписатьСтроку("""param1_1"": 0,"+ Символы.ПС); ФайлОтправки.Закрыть(); HTTPЗапрос.УстановитьИмяФайлаТела(имяФайлаОтправки); РезультатЗапроса = Соединение.ОтправитьДляОбработки(HTTPЗапрос); Результат такой же | |||
| 15
    
        Kassern 01.07.22✎ 12:44 | 
        (14) есть же просто ЗаписатьJson()     | |||
| 16
    
        Kassern 01.07.22✎ 12:44 | 
        без всяких сериализаторов     | |||
| 17
    
        youalex 01.07.22✎ 12:44 | 
        (13) у тебя первый фрагмент из Postman? 
 "{ "param1": "0", "param2": true," .. - это джейсон. Сериализатор XDTO сериализовал, сериализовал, да не высериализовал. Он в формате схемы типов 1C сериализует, а тебе же надо обычную структуру, это ЗаписатьJSON() - Глобальный метод | |||
| 18
    
        Gary417 01.07.22✎ 12:44 | 
        Чёто давно не брал я в руки шашку....а что в 1С нигде явно не указывается что запрос - POST?     | |||
| 19
    
        helloman 01.07.22✎ 12:44 | 
        (14) Такой вариант работает если в тело нужно записать form-data, а вот с raw как?     | |||
| 20
    
        youalex 01.07.22✎ 12:45 | 
        (18) ОтправитьДляОбработки()     | |||
| 21
    
        Kassern 01.07.22✎ 12:46 | 
        (19) а вы вообще понимаете, что значит RAW data?     | |||
| 22
    
        Kassern 01.07.22✎ 12:47 | 
        (18) Есть замечательный универсальный метод ВызватьHTTPМетод, где явно прописывается какой метод нужен     | |||
| 23
    
        Gary417 01.07.22✎ 12:48 | 
        (22) (20) спс     | |||
| 24
    
        Kassern 01.07.22✎ 12:48 | 
        (17) я же писал ему проверить переменную с итоговой строкой на корректность...     | |||
| 25
    
        helloman 01.07.22✎ 12:52 | 
        (15) Верно, ошибочка     | |||
| 26
    
        youalex 01.07.22✎ 12:56 | 
        (24) Терапевт: Ну, на что жалуетесь?
 Ветеринар: Как у вас всё просто! Сори) | |||
| 27
    
        helloman 01.07.22✎ 13:00 | 
        Всем спасибо, все заработало     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |