Имя: Пароль:
1C
1С v8
API v3. Параметры в формте JSON.
, ,
0 runlikepony
 
06.02.20
13:04
Коллеги, добрый день.

Подскажите пожалуйста или угостите примерчиком как подставить параметр в формате json в http запросе.

Пример из мануала:

$ curl http://{SDP_BASE_URL}/api/v3/requests \
      -H "Authtoken: FC645540-6424-4A07-8A05-A865F4B8168A" \
      -d 'input_data= {
    "list_info": {
        "row_count": 20,
        "start_index": 1,
        "sort_field": "subject",
        "sort_order": "asc",
        "get_total_count": true,
        "search_fields": {
            "subject": "New hire",
            "priority.name": "high"
        },
        "filter_by": {
            "name": "Open_System"
        }
    }
}'

Что имею сейчас. Запрос выполняется, но результат выполнения без учета параметров. Заранее спасибо.

&НаСервере
Процедура ВыполнитьНаСервере()
    
    СтрокаJSN = СформироватьСтрокуJSN();
    
    АдресСервиса = "sd-srv-01";
    АдресРесурса = "/api/v3/requests";
    СтрокаПараметров = "";
    
    HTTPЗапрос = Новый HTTPЗапрос(АдресРесурса);
    HTTPЗапрос.Заголовки.Вставить("Content-type", "application/x-www-form-urlencoded");
    HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаJSN, КодировкаТекста.UTF8);
    HTTPЗапрос.Заголовки.Вставить("Authtoken", "");
        HTTPЗапрос.Заголовки.Вставить("input_data", СтрокаJSN);
    HTTPСоединение = Новый HTTPСоединение(АдресСервиса);
    
    Попытка
        Ответ = HTTPСоединение.Получить(HTTPЗапрос);
    Исключение
        Сообщить("Ошибка при отправке запроса: " + ОписаниеОшибки());
    КонецПопытки;
    
    Если Ответ.КодСостояния = 200 Тогда
        СтрокаОтвет = Ответ.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8);
        
        Если Не ПустаяСтрока(СтрокаОтвет) Тогда
            РезультатПроверки = СтрокаОтвет;
            Сообщить(РезультатПроверки);
        КонецЕсли;
    КонецЕсли;

    
КонецПроцедуры

&НаСервере
Функция СформироватьСтрокуJSN()
    
    СтруктураInputDATA    = Новый Структура;
    СтруктураList        = Новый Структура;
    СтруктураFilterBy    = Новый Структура;
    Структура            = Новый Структура;
        
    Структура.Вставить("row_count",        1);
    Структура.Вставить("start_index",    0);
    
    СтруктураFilterBy.Вставить("name", "8702_MyView");
    
    Структура.Вставить("filter_by",        СтруктураFilterBy);
    
    СтруктураList.Вставить("list_info", Структура);
    
    ЗаписьJSON = Новый ЗаписьJSON;
    ПараметрыJSON = Новый ПараметрыЗаписиJSON(, Символы.Таб);  
    ЗаписьJSON.УстановитьСтроку(ПараметрыJSON);
    ЗаписатьJSON(ЗаписьJSON, СтруктураList, Новый НастройкиСериализацииJSON);
    СтрJSON = ЗаписьJSON.Закрыть();
    
    Возврат СтрJSON;
    
КонецФункции
1 VKS
 
06.02.20
13:33
Ответ = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
2 VKS
 
06.02.20
13:34
и тут токен нужен

HTTPЗапрос.Заголовки.Вставить("Authtoken", "");
3 runlikepony
 
06.02.20
13:40
Спасибо.

Токен вставил.

Если делать через "ОтправитьДляОбработки". Возвращает ошибку...
4 runlikepony
 
06.02.20
13:54
В моем примере необходимо реализовать GET запрос. "ОтправитьДляОбработки" не подойдет.
5 VKS
 
06.02.20
14:04
С гетом не выйдет, похоже 1с так не умеет. Я в свое время решил через вебпрограммистов, они запрашивали, а мне передавали в нормальном виде.

Как в get-запрос засунуть тело?
6 timurhv
 
06.02.20
14:44
(4) По-моему, у вас ошибка в заголовке
http://catalog.mista.ru/public/619416/
7 Necessitudo
 
06.02.20
14:57
(5) GET-запрос не содержит body.
8 lamme
 
06.02.20
15:01
недавно делал обращение к сервису армтека
там параметры передаются в джсоне постом
---------------------------------------
СтрОтвета = ПолучитьЛогинПарольОтАрмтека();
    email =СтрОтвета.email;
    password = СтрОтвета.password;
    VKORG    = СтрОтвета.VKORG;
    KUNNR_RG = СтрОтвета.KUNNR_RG;


     HTTPСоединение =  Новый HTTPСоединение("ws.armtek.ru", , email, password, Новый ИнтернетПрокси, ,);



    HTTPЗаголовки = Новый Соответствие;
    HTTPЗаголовки.Вставить("Content-Type", "application/json");
    
    HTTPЗапрос = Новый HTTPЗапрос("/api/ws_search/search?format=json", HTTPЗаголовки);
    
    Запись = Новый ЗаписьJSON;
    ИмяФайлаТела = ПолучитьИмяВременногоФайла("json");
    Запись.ОткрытьФайл(ИмяФайлаТела);
    
    Данные = Новый Структура;
    Данные.Вставить("VKORG", VKORG);
    Данные.Вставить("KUNNR_RG", KUNNR_RG);
    Данные.Вставить("PIN", КодироватьСтроку(сокрлп(ИскомыйОЕМ) , СпособКодированияСтроки.КодировкаURL));
    Данные.Вставить("format", "json");

    Данные.Вставить("format", "json");
    
    ЗаписатьJSON(Запись, Данные, Новый НастройкиСериализацииJSON);
    Запись.Закрыть();
    
    HTTPЗапрос.УстановитьИмяФайлаТела(ИмяФайлаТела);
    
    Ответ = HTTPСоединение.ВызватьHTTPМетод("POST", HTTPЗапрос);

    Возврат Ответ
9 VKS
 
06.02.20
15:15
(8) в вашем примере ВызватьHTTPМетод("POST", HTTPЗапрос)
а мы про get

(7) может содержать, 1с не умеет так работать
10 crasler
 
06.02.20
15:29
Можно попробовать реализовать через сокеты http://catalog.mista.ru/public/119982/
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.