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


1С:Предприятие ::

Метки: 

HTTP-сервис как передать параметры

Я
   Demetres
 
30.08.18 - 14:41
Добрый день.

Подскажите как передать параметры для HTTP-сервиса (HTTPЗапрос.ПараметрыЗапроса)? Для вызова сервиса использую код:

&НаСервере
Процедура ВыполнитьHTTPЗапросНаСервере_Repairs_02()
    
    Заголовки = Новый Соответствие;
    Заголовки.Вставить("Content-Type", "application/json");

    АдресРесурса = "*************************************************";
    
    HTTPЗапрос = Новый HTTPЗапрос(АдресРесурса, Заголовки);
        
    Соединение = Новый HTTPСоединение("************", 443 ,,,, 100, 
        Новый ЗащищенноеСоединениеOpenSSL(Неопределено, Неопределено));
    
    РезультатHTTPОтвет = Соединение.Получить(HTTPЗапрос);    
    
    ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
        СтрШаблон("Код НТТР ответа - %1", Строка(РезультатHTTPОтвет.КодСостояния)));
        
    Если РезультатHTTPОтвет.КодСостояния = 200 Тогда 
        
        ПолучитьСтрокуОтвета = РезультатHTTPОтвет.ПолучитьТелоКакСтроку();
        
        Если ЗначениеЗаполнено(ПолучитьСтрокуОтвета) Тогда 
            ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ПолучитьСтрокуОтвета);
        КонецЕсли;    
    КонецЕсли;    
    
КонецПроцедуры
 
 
   Demetres
 
1 - 30.08.18 - 14:43
После вызова процедцры "ВыполнитьHTTPЗапросНаСервере_Repairs" на стороне НТТР сервиса получаю HTTPЗапрос с типом - HTTPСервисЗапрос, но как делать вызов и передать туда данные чтобы были заполнены "ПараметрыЗапроса", никак не пойму.
   Lexey_
 
2 - 30.08.18 - 14:45
(1) HTTPСервисЗапрос (HTTPServiceRequest)

ПараметрыЗапроса (QueryOptions)


Использование:
Только чтение.

Описание:
Тип: ФиксированноеСоответствие.
Содержит параметры запроса (в строке URL-адреса параметры следуют после знака запроса).
   Demetres
 
3 - 30.08.18 - 14:47
(2) я это прочитал. Но так и не понял что нужно мне дописать в моей процедуре "ВыполнитьHTTPЗапросНаСервере_Repairs" чтобы передать параметры???
   Demetres
 
4 - 30.08.18 - 14:52
Может у кого-то пример кода есть?
   Cyberhawk
 
5 - 30.08.18 - 14:54
Автор баклан какой-то, адрес ресурса скрыл звездочками и чего-то тут спрашивает
   Demetres
 
6 - 30.08.18 - 14:59
(5) я про код спрашиваю, зачем тут адрес?
   Адинэснег
 
7 - 30.08.18 - 15:05
(6) на сервисе и спрашивай, какие данные, каким методом в параметры передавать
может гетом, может постом...
может строкой, может ДД
   Адинэснег
 
8 - 30.08.18 - 15:05
мы откуда значем, чего ждёт твой сервис
   Lamer1C
 
9 - 30.08.18 - 15:11
(0) есть два варианта - 1. Через тело запроса 2. Через заголовки.
   Lamer1C
 
10 - 30.08.18 - 15:14
[code]
// 2.

Заголовки = Новый Соответствие();
Заголовки.Вставить("Accept", "text/xml");
Заголовки.Вставить("Token", Token);
Запрос = Новый HTTPЗапрос(АдресРесурса, Заголовки);
// 1.

Запрос.УстановитьТелоИзСтроки(XMLЗапроса);
[/code]
 
 Рекламное место пустует
   Demetres
 
11 - 30.08.18 - 15:20
(8) в каком смысле "что ждет", не совсем вас понимаю?

(10) спасибо сейчас попробую.
   Cyberhawk
 
12 - 30.08.18 - 15:21
(6) За тем, что ты спрашиваешь за "ПараметрыЗапроса"
   Lexey_
 
13 - 30.08.18 - 15:22
(3) в СП опечатка:
в строке URL-адреса параметры следуют после знака ВОпроса
   Lexey_
 
14 - 30.08.18 - 15:22
(4) пример можешь посмотреть в адресной строке браузера в этой теме
   Demetres
 
15 - 30.08.18 - 15:27
(12) ну так правильно, через свою процедуру я делаю запрос. А на стороне НТТР сервиса функция

Функция RepairsGetInformation(Запрос)
    Возврат УТП_HS_ExportService_RepairsRepairsGetInformation(Запрос);
    
КонецФункции

Параметр "Запрос" имеет тип "HTTPСервисЗапрос", у него есть свойство "ПараметрыЗапроса". И я не могу понять как делать запрос к НТТР сервису чтобы этот параметр был заполнен?
   Demetres
 
16 - 30.08.18 - 15:30
(14) id=824674 это я понимаю, как сделать ссылку руами я знаю. Но мне не понятно, как сделать кодом вызов (моя процедура "ВыполнитьHTTPЗапросНаСервере_Repairs_02()") и в нем передать параметры, как через текст ссылки (id=824674)
   Lexey_
 
17 - 30.08.18 - 15:36
(16) см (5)
   Cyberhawk
 
18 - 30.08.18 - 15:38
(15) Никак. Это параметр на стороне сервера, а не клиента
   Demetres
 
19 - 30.08.18 - 15:45
(18) получается что если формируешь кодом запрос к HTTP сервису запрос, то не можешь передавать параметры? Как-то странно
   Hmster
 
20 - 30.08.18 - 15:51
HTTPЗапрос = Новый HTTPЗапрос("/api/?id=333");
HTTPСоединение = Новый HTTPСоединение(Сервер.com);
HTTPОтвет = HTTPСоединение.Получить(HTTPЗапрос,ИмяВрФайла);

?id=333 - это твои параметры
?id=333&gg=2 если 2 параметра
   Demetres
 
21 - 30.08.18 - 15:55
(20) Спасибо
   Cyberhawk
 
22 - 30.08.18 - 16:55
(19) Конечно можешь, иначе зачем на стороне сервера по-твоему это свойство сделано?
   Demetres
 
23 - 30.08.18 - 17:44
(22) вот ознакомьтесь https://youtu.be/YuLXYX4lzHY
   Demetres
 
24 - 30.08.18 - 17:50
Вот полный текст процедуры GET запроса к HTTP-сервису с параметрами. Все параметры указываются после знака "?", может кому-то понадобиться.

&НаСервере
Процедура ВыполнитьHTTPЗапросНаСервере_Repairs_01()
    
    Заголовки = Новый Соответствие;
    Заголовки.Вставить("Content-Type", "application/json");

    АдресРесурсаДляGET = СтрШаблон("%1/%2/?%3&%4&%5=%6&%7=%8", АдресРесурса, "Repairs", "IntegrationWithTablet", 
        "VerifyLoginАndUserPassword", "NameUser", Логин, "Password", Пароль);
    
    HTTPЗапрос = Новый HTTPЗапрос(АдресРесурсаДляGET, Заголовки);
        
    Соединение = Новый HTTPСоединение(АдресСервера, 443,,,, 100, 
        Новый ЗащищенноеСоединениеOpenSSL(Неопределено, Неопределено));
    
    РезультатHTTPОтвет = Соединение.Получить(HTTPЗапрос);    
    
    ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
        СтрШаблон("Код НТТР ответа - %1", Строка(РезультатHTTPОтвет.КодСостояния)));
        
    Если РезультатHTTPОтвет.КодСостояния = 200 Тогда 
        
        ПолучитьСтрокуОтвета = РезультатHTTPОтвет.ПолучитьТелоКакСтроку();
        
        Если ЗначениеЗаполнено(ПолучитьСтрокуОтвета) Тогда 
            ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ПолучитьСтрокуОтвета);
        КонецЕсли;    
    КонецЕсли;    
    
КонецПроцедуры
   Fram
 
25 - 30.08.18 - 19:06
А передавать пароль как параметр в url это не моветон разве?
   Fram
 
26 - 30.08.18 - 19:09
(24) способ указания параметров определяется создателем сервиса. Как упомянуто в (7) их несколько может быть.
   Demetres
 
27 - 31.08.18 - 10:29
(25) Да согласен. Поэтому сейчас делаю POST запрос, логин и пароль буду передовать через тело в JSON. Это моя первая встреча с HTTP-сервисом.
   Demetres
 
28 - 03.09.18 - 13:25
Вот пример POST запроса с параметром. На этом всё) всем удачи!

&НаСервере
Процедура ВыполнитьHTTPЗапросНаСервере_Repairs_POST()
    
    Заголовки = Новый Соответствие;
    Заголовки.Вставить("Content-Type", "application/json");

    АдресРесурсаДляGET = СтрШаблон("%1/%2/?%3&%4", АдресРесурса, "Repairs", "IntegrationWithTablet", 
        "VerifyLoginАndUserPassword");
    
    // Подготовка данныз JSON для POST запроса.

    ЗаписьJS = Новый ЗаписьJSON();
    ЗаписьJS.УстановитьСтроку();
    ЗаписатьJSON(ЗаписьJS, Новый Структура("NameUser, Password", Логин, Пароль));
    ТекстJSON = ЗаписьJS.Закрыть();    
    
    HTTPЗапрос = Новый HTTPЗапрос(АдресРесурсаДляGET, Заголовки);
    HTTPЗапрос.УстановитьТелоИзСтроки(ТекстJSON);    
    
    Соединение = Новый HTTPСоединение(АдресСервера, 443,,,, 100, 
        Новый ЗащищенноеСоединениеOpenSSL(Неопределено, Неопределено));
    
    РезультатHTTPОтвет = Соединение.ОтправитьДляОбработки(HTTPЗапрос);    
    
    ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
        СтрШаблон("Код НТТР ответа - %1", Строка(РезультатHTTPОтвет.КодСостояния)));
        
    Если РезультатHTTPОтвет.КодСостояния = 200 Тогда 
        
        ПолучитьСтрокуОтвета = РезультатHTTPОтвет.ПолучитьТелоКакСтроку();
        
        Если ЗначениеЗаполнено(ПолучитьСтрокуОтвета) Тогда 
            ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ПолучитьСтрокуОтвета);
        КонецЕсли;    
    КонецЕсли;    
    
КонецПроцедуры
   Сияющий в темноте
 
29 - 03.09.18 - 20:54
Параметры в строке get просто пишутся текстом в строку и получаются через относительнаястрока.



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