Имя: Пароль:
1C
 
HTTP-сервис как передать параметры
,
0 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Ответ.ПолучитьТелоКакСтроку();
        
        Если ЗначениеЗаполнено(ПолучитьСтрокуОтвета) Тогда
            ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ПолучитьСтрокуОтвета);
        КонецЕсли;    
    КонецЕсли;    
    
КонецПроцедуры
1 Demetres
 
30.08.18
14:43
После вызова процедцры "ВыполнитьHTTPЗапросНаСервере_Repairs" на стороне НТТР сервиса получаю HTTPЗапрос с типом - HTTPСервисЗапрос, но как делать вызов и передать туда данные чтобы были заполнены "ПараметрыЗапроса", никак не пойму.
2 Lexey_
 
30.08.18
14:45
(1) HTTPСервисЗапрос (HTTPServiceRequest)

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


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

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

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

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

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

?id=333 - это твои параметры
?id=333&gg=2 если 2 параметра
21 Demetres
 
30.08.18
15:55
(20) Спасибо
22 Cyberhawk
 
30.08.18
16:55
(19) Конечно можешь, иначе зачем на стороне сервера по-твоему это свойство сделано?
23 Demetres
 
30.08.18
17:44
(22) вот ознакомьтесь https://youtu.be/YuLXYX4lzHY
24 Demetres
 
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Ответ.ПолучитьТелоКакСтроку();
        
        Если ЗначениеЗаполнено(ПолучитьСтрокуОтвета) Тогда
            ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ПолучитьСтрокуОтвета);
        КонецЕсли;    
    КонецЕсли;    
    
КонецПроцедуры
25 Fram
 
30.08.18
19:06
А передавать пароль как параметр в url это не моветон разве?
26 Fram
 
30.08.18
19:09
(24) способ указания параметров определяется создателем сервиса. Как упомянуто в (7) их несколько может быть.
27 Demetres
 
31.08.18
10:29
(25) Да согласен. Поэтому сейчас делаю POST запрос, логин и пароль буду передовать через тело в JSON. Это моя первая встреча с HTTP-сервисом.
28 Demetres
 
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 просто пишутся текстом в строку и получаются через относительнаястрока.
Ошибка? Это не ошибка, это системная функция.