Имя: Пароль:
1C
1С v8
HTTP. Передача параметров через POST
0 Slon747
 
15.05.19
15:01
Есть работающая команда curl для передачи методом POST:
curl -H "Content-Type: application/json" -H "x-s-k: 1cTestKey" -H "Accept: application/json" -d '[{"uid":"9af671c2-3fbe7-1e8f-3085a99d1f35","active":true,"i18n":{"ua":{"name":"Color 2"},"ru":{"name":"Цвет"}}}]' https://mydomain.com/api/v1/catalog/option

Тут передается:
1. Ключ API "x-s-k" со значением "1cTestKey"
2. Строка JSON

Куда передается: https://mydomain.com/api/v1/catalog/option

Пробую сделать то же самое в 1С:

        //читаем JSON из файла
    ФайлJSON= Новый ЧтениеТекста("C:\post.json", КодировкаТекста.UTF8);
    СтрокаJSON = ФайлJSON.Прочитать();
      
        //создаем HTTPS-соединение
    ssl = Новый ЗащищенноеСоединениеOpenSSL(Новый СертификатКлиентаWindows(СпособВыбораСертификатаWindows.Выбирать), Новый СертификатыУдостоверяющихЦентровWindows());
    HTTPСоединение = Новый HTTPСоединение("mydomain.com",,,,,5, ssl);

    HTTPЗапрос = Новый HTTPЗапрос("/api/v1/catalog/categories");
    HTTPЗапрос.Заголовки.Вставить("Content-type", "application/json");
    HTTPЗапрос.Заголовки.Вставить("x-s-k", "1cTestKey");
    
    HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаJSON, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
    
    Ответ = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
    
    Сообщить("Код результата: " + Ответ.КодСостояния);
    Сообщить("Ответ: " + Ответ.ПолучитьТелоКакСтроку("UTF-8"));

Получаю ответ "{"status":false}", т.е. совсем не то, что через curl.
Не подскажете, что не правильно?
1 polosov
 
15.05.19
15:04
Новый HTTPЗапрос("/api/v1/catalog/categories");
2 Slon747
 
15.05.19
15:12
(1) Забыл добавить HTTPЗапрос.Заголовки.Вставить("Accept", "application/json");
Но не помогло
А что не так с Новый HTTPЗапрос("/api/v1/catalog/categories"); ?
3 polosov
 
15.05.19
15:15
(2) Курл обращается к сервису /api/v1/catalog/option
а 1с к /api/v1/catalog/categories
4 trad
 
15.05.19
15:17
(2) в примере с курлом /api/v1/catalog/option
5 Slon747
 
15.05.19
15:20
(4) но в файле json у меня был верный, для categories.

А вот так заработал:

    Заголовки = Новый Соответствие;
    Заголовки.Вставить("Content-Type","application/json");
    Заголовки.Вставить("Accept","application/json");
    Заголовки.Вставить("x-s-k","1cTestKey");

    Попытка
        Соединение = Новый HTTPСоединение("mydomain.com",,,,,,Новый ЗащищенноеСоединениеOpenSSL());
    Исключение
        Сообщить("Ошибка соединения с сайтом");
    КонецПопытки;
    Если НЕ Соединение = Неопределено Тогда
        Попытка
            ФайлДанных = Новый ЧтениеТекста("C:\post.json", КодировкаТекста.UTF8);
            Строка = ФайлДанных.Прочитать();
            
            HTTPЗапрос = Новый HTTPЗапрос("/api/v1/catalog/categories",Заголовки);
            HTTPЗапрос.УстановитьТелоИзСтроки(Строка);
                
            Ответ = Соединение.ОтправитьДляОбработки(HTTPЗапрос);  
            ОтветВВидеСтроки = "";
            ОтветВВидеСтроки = Ответ.ПолучитьТелоКакСтроку();
            Сообщить(ОтветВВидеСтроки);
        Исключение
            Сообщить("Ошибка соединения с сайтом");
        КонецПопытки;
    КонецЕсли;