|
| ||
Aswed 10.03.20 - 18:30 | Пытаюсь отправить данные POST запросом с данными упакованными в JSON
СоединениеHHTP = Новый HTTPСоединение(Хост); //адрес сервера без http HTTPЗапрос = Новый HTTPЗапрос; ЗаписьJSON = Новый ЗаписьJSON; МассивДанныхJson = Новый Массив; СтруктураДанныхJson = Новый Структура; HTTPЗапрос.АдресРесурса = "/client"; HTTPЗапрос.Заголовки.Вставить("Authorization", "Basic ***"); HTTPЗапрос.Заголовки.Вставить("Content-Type", "application/x-www-form-urlencoded"); HTTPЗапрос.Заголовки.Вставить("Accept", "application/json"); HTTPЗапрос.Заголовки.Вставить("Connection", "Keep-Alive"); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 | Контрагенты.Ссылка |ИЗ | Справочник.Контрагенты КАК Контрагенты"; ЗаписьJSON.УстановитьСтроку(); Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл СтруктураИнформации = Новый Структура; СтруктураИнформации.Вставить("type", 0); СтруктураИнформации.Вставить("name", "Тест3"); СтруктураИнформации.Вставить("code", "111"); МассивДанныхJson.Добавить(СтруктураИнформации); КонецЦикла; СтруктураДанныхJson.Вставить("client", МассивДанныхJson); ЗаписатьJSON(ЗаписьJSON, СтруктураДанныхJson); СтрокаJson = ЗаписьJSON.Закрыть(); Сообщить(СтрокаJson); HTTPЗапрос.УстановитьТелоИзСтроки("param="+СтрокаJson); ДокументОтвет = "C:\1\TMP.txt"; Попытка //Отправляем для обработки на наш сервер Ответ = СоединениеHHTP.ОтправитьДляОбработки(HTTPЗапрос, ДокументОтвет); Сообщить(Ответ.КодСостояния); Исключение #Если клиент Тогда Сообщить(ОписаниеОшибки()); #КонецЕсли КонецПопытки; В ответа приходит [{"field":"code","message":"Необходимо заполнить «Код»."},{"field":"type","message":"Необходимо заполнить «Юр. лицо»."},{"field":"name","message":"Необходимо заполнить «Имя»."}] Я уже всю голову сломал что ни так. Ткните носом где не верно написано. | ||
Cyberhawk 1 - 10.03.20 - 18:43 | Ну может сервис не объект client на корневом уровне ожидает, а сразу массив? | ||
Cyberhawk 2 - 10.03.20 - 18:43 | Ну и Content-Type зачем такой ставишь? ЖСОН поставь | ||
Сияющий в темноте 3 - 10.03.20 - 18:56 | (2)так он его и посылает,присваивая параметру,а про то,что в этом случае экранирование симаолов не мешало бы сделать,забыл. | ||
mzelensky 4 - 10.03.20 - 19:10 | (0) Программулиной SoapUI попробуй. Там все более наглядно и очевидно | ||
Aswed 5 - 10.03.20 - 19:21 | |||
Aswed 6 - 10.03.20 - 19:22 | (4) Не юзал, там есть вариант посмотреть что именно шлётся в JSON? | ||
ДенисЧ 7 - 10.03.20 - 19:26 | Сейчас мы весь вечер будем телепить спецификацию того, что ожидает получить сервер... | ||
Cyberhawk 8 - 10.03.20 - 19:27 | (5) "Я уже и атк пробовал, всё равно эту ошибку валит" // Ну так это означает, что ты неправильно просто тело передаешь. Тебе оттуда виднее. | ||
Cyberhawk 9 - 10.03.20 - 19:28 | "при тестировании в Postman всё зашибись уходит, но не могу там посмотреть именно структуру JSON" // Покажи каким кодом / параметрами в Постмане все успешно уходит | ||
Aswed 10 - 10.03.20 - 19:30 | СоединениеHHTP = Новый HTTPСоединение(Хост);//адрес сервера без http HTTPЗапрос = Новый HTTPЗапрос; ЗаписьJSON = Новый ЗаписьJSON; СтруктураДанныхJson = Новый Структура; HTTPЗапрос.АдресРесурса = "/api/client"; HTTPЗапрос.Заголовки.Вставить("Authorization", "Basic ****"); HTTPЗапрос.Заголовки.Вставить("Content-Type", "application/json"); HTTPЗапрос.Заголовки.Вставить("Accept", "application/json"); HTTPЗапрос.Заголовки.Вставить("Connection", "Keep-Alive"); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 | Контрагенты.Ссылка |ИЗ | Справочник.Контрагенты КАК Контрагенты"; ЗаписьJSON.УстановитьСтроку(); Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда СтруктураИнформации = Новый Структура; СтруктураИнформации.Вставить("type", 0); СтруктураИнформации.Вставить("name", "Тест3"); СтруктураИнформации.Вставить("code", "111"); КонецЕсли; ЗаписатьJSON(ЗаписьJSON, СтруктураИнформации); СтрокаJson = ЗаписьJSON.Закрыть(); Сообщить(СтрокаJson); HTTPЗапрос.УстановитьТелоИзСтроки("param="+СтрокаJson); ДокументОтвет = "C:\1\TMP.txt"; Попытка  //Отправляем для обработки на наш сервер Ответ = СоединениеHHTP.ОтправитьДляОбработки(HTTPЗапрос, ДокументОтвет); Сообщить(Ответ.КодСостояния); Исключение #Если клиент Тогда Сообщить(ОписаниеОшибки()); #КонецЕсли КонецПопытки; Переписал вот так.Теперь ругается на синтаксис: {"name":"Bad Request","message":"Invalid JSON data in request body: Syntax error.","code":0,"status":400,"type":"yii\\web\\BadRequestHttpException"} | ||
Aswed 11 - 10.03.20 - 19:31 | |||
ДенисЧ 12 - 10.03.20 - 19:35 | (11) А теперь вторую половину вечера мы будем тепелепить имя сервиса... | ||
Aswed 13 - 10.03.20 - 19:38 | |||
Garykom 14 - 10.03.20 - 19:51 | (10) У тебя "HTTPЗапрос.УстановитьТелоИзСтроки("param="+СтрокаJson);" ну никак не стыкуется с "HTTPЗапрос.Заголовки.Вставить("Content-Type", "application/json");" Убери это "param="+ | ||
Aswed 15 - 10.03.20 - 19:57 | (14) Мля!!!!! Garykom ты попал в точку!!!!!
Именно из-за этой хероты и не работало ни черта!!! Хотя специально сейчас взял те 5 строчек с описанием API, и там написано что именно через "param=" отправлять! Спасибо! |
|
Список тем форума
|