Имя: Пароль:
1C
1С v8
Нормальный ответ в Postman и пустой ответ от сервера в 1С
, ,
0 Aswed
 
20.04.20
15:36
СоединениеHHTP = Новый HTTPСоединение("pr-lg.ru",,,,,,Новый ЗащищенноеСоединениеOpenSSL());
        
    HTTPЗапрос = Новый HTTPЗапрос();
    
    HTTPЗапрос.АдресРесурса = "/api/search/items";
    
    HTTPЗапрос.Заголовки.Вставить("secret",     "******");
    HTTPЗапрос.Заголовки.Вставить("article",     "35197");
    
    ДокументОтвет = ПолучитьИмяВременногоФайла();
    Ответ = СоединениеHHTP.Получить(HTTPЗапрос,ДокументОтвет);
    
    ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Ответ.КодСостояния);
    
    ЧтениеJSON = Новый ЧтениеJSON;
    ЧтениеJSON.ОткрытьФайл(ДокументОтвет);
    
    СтруктураОтвета = ПрочитатьJSON(ЧтениеJSON, Истина);

Собственно вот таким кодом обращаюсь к сайту. Оттуда приходит код ответа 200, т.е. запрос выполнен верно. Но вот документ ответ остаётся пустым.
При этом такой же вот запрос отправляю через Postman, с теми же параметрами в заголовке и туда всё возвращает как надо.
Не соображу куда рыть блин.
1 bolero
 
20.04.20
16:09
ДокументОтвет пустой или СтруктураОтвета пустой?

может, там json приходит паралимпийский, и ПрочитатьJSON() его разбирает в пусто
2 Aswed
 
20.04.20
16:18
(1) Документ ответ.

Я методом тыка нашёл способ что бы он возвращал мне данные.

HTTPЗапрос.АдресРесурса = "/api/search/items?secret=******&article=35197";

Т.е. то что я указываю в заголовка APIключ и параметр поиска им не канает.
Надо непосредственно форматировать строку адреса ресурса.

Я то могу её формировать динамически, не проблема, но может я просто как то ни так задаю параметры в заголовках? Хотя там вроде по другому их и не задать.
3 Garykom
 
гуру
20.04.20
16:25
"Content-Type" установи правильный
4 Aswed
 
20.04.20
16:30
(3)     HTTPЗапрос.Заголовки.Вставить("secret",         "*****");
    HTTPЗапрос.Заголовки.Вставить("article",         "35197");
    HTTPЗапрос.Заголовки.Вставить("Content-Type",     "json");

Не прокатило
5 Garykom
 
гуру
20.04.20
16:36
(4) нету такого "json"
6 Aswed
 
20.04.20
16:45
(5) Сорян

HTTPЗапрос.Заголовки.Вставить("Content-Type",     "application/json");

Но разницы ни какой нет. Всё так же ответ от сервера пустой файл(
7 Garykom
 
гуру
20.04.20
16:54
"application/x-www-form-urlencoded" попробуй, может в этом случае для GET 1C заголовки правильно засунет ))
8 Lexey_
 
20.04.20
17:01
(0) временный файл не нужен:

    Ответ = СоединениеHHTP.Получить(HTTPЗапрос);
    
    ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Ответ.КодСостояния);
    
    ЧтениеJSON = Новый ЧтениеJSON;
    ЧтениеJSON.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку());
9 Aswed
 
20.04.20
17:04
(7) Не прокатило(
(8) Да это то ладно. Там красоту потом наведу. Главное что бы работало как надо блин(
10 Lexey_
 
20.04.20
17:07
(9) я не про красоту, вот именно этот код рабочий, без временного файла.
Нужно использовать временный файл либо HTTPОтвет, что-то одно.
11 Lexey_
 
20.04.20
17:08
+(8) либо не нужна переменная Ответ
12 Aswed
 
20.04.20
17:11
(10) Да не. Всё отлично можно использовать. У меня так работает в куче мест.
Но для успокоения попробовал сразу без файла, как ты в (8) сделал. Результат тот же . Код ответа сервера 200. Сам ответ пустой.
13 Lexey_
 
20.04.20
17:21
(12) да чуть-чуть перепутал: хотел сказать, что если указано имя временного файла, то из HTTPОтвета тело уже не получишь, но здесь не этот случай
14 bolero
 
20.04.20
18:34
(2) а в доке к api написано параметры в заголовках передавать? крайне редко применяется такая дичь, чисто с целью задолбать пользователей
обычно либо жестко требуют в теле POST, либо на выбор POST или GET, либо часть в GET, остальное в POST
15 sitex
 
naïve
20.04.20
18:47
(14) С доков и надо начинать, https://pr-lg.ru/api.
16 sitex
 
naïve
20.04.20
18:50
(2) Если нашел как возвращает, ТО как бы это GET и у тебя видать или кукис храниться где то раз выводит. Их надо в заголовках передать авторизацию. Посмотри лучше в Fiddler-е.
17 Aswed
 
21.04.20
08:53
(14)
Для получения ответа от системы API, необходимо подключиться к определенному пути ресурса, например: https://pr-lg.ru/api/search/products?secret=[API]&article=[Артикул].

Вот всё что написано в "документации"))))
И дальше только параметры для разных функций.