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

HTTP JSON POST

HTTP JSON POST
Я
   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
(1) Я уже и атк пробовал, всё равно эту ошибку валит.
(3) Хмммм, думаешь может помочь?
Бесит то что при тестировании в Postman всё зашибись уходит, но не могу там посмотреть именно структуру JSON.
   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
(7) )))))))))))))))))))))))
Да вот была бы у меня эта спецификация, ни приставал бы. там такие уроды это API делали, что млять почти всё на ощупь приходится подбирать. Хорошо хоть URL дали))))
(9) На рабочем компе осталось, завтра скину точно. Но параметры такие же как в коде.
   ДенисЧ
 
12 - 10.03.20 - 19:35
(11) А теперь вторую половину вечера мы будем тепелепить имя сервиса...
   Aswed
 
13 - 10.03.20 - 19:38
(12) )))))))))))
Не общедоступный, закрытый) Потому и сделанный так убого.
   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=" отправлять!

Спасибо!

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