|
Записать в тело 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
|
Всем спасибо, все заработало
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |