HTTP-сервис. Как получить параметры POST запроса

1. Gendelf 03.07.19 09:29 Сейчас в теме
КА 2.4
Столкнулся с задачей обработать и выдать результат POST запроса сайта. Отладка работает только с GET запросами, ибо там просто ссылка. С POST приходится писать почти вслепую.

Вопросы... как получить параметры POST запроса и есть ли отличия в ответе или можно оставить как GET ?

//GET запрос работает правильно.
Функция AuthorizationПолучить(Запрос)
	Логин = Запрос.ПараметрыURL["Login"];
	Пароль = Запрос.ПараметрыURL["Password"];
	
	Ответ = Новый HTTPСервисОтвет(200);
	Ответ.УстановитьТелоИзСтроки(ПолучитьМассивРезультатов(Логин, Пароль));
	
	Возврат Ответ
КонецФункции
Показать
Прикрепленные файлы:
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Isa816 64 03.07.19 09:37 Сейчас в теме
(1) Включить автоматическое подключение и отлавливать параметры. Обычно в пост запросе параметры передаются в HEAD заголовках.
Прикрепленные файлы:
3. Gendelf 03.07.19 09:38 Сейчас в теме
(2) авт. подключение включено. А есть пример запроса с параметрами? Я бы с имитировал запрос сайта и мб отловил бы в отладке.
8. user623969_dusa 03.07.19 09:58 Сейчас в теме
(1) как получить параметры ПОСТ запроса самый очевидный способ попросить того кто отправляет пост запрос рассказать какие параметры используются. Должна быть документация. И вы уже зная параметры их обрабатываете. Вроде так жизнь устроена.
... зная параметры вы уже можете сами сгенерировать ПОСТ запрос себе и отладка будет не такой слепой как раньше.. а так параметры передаются в двух вариантах в урл или самом запросе
Код = Запрос.ПараметрыURL.Получить("m");	
Время = Запрос.ПараметрыЗапроса.Получить("t");
10. Gendelf 03.07.19 10:03 Сейчас в теме
(8) параметра будет два, имя им Login и Password. Но как их получить...
11. melenaspb 208 03.07.19 10:07 Сейчас в теме
(10) А так попробуйте :
Функция AuthorizationПолучить(Запрос)
Login  = Запрос.ПараметрыЗапроса.Получить("Login "); 
Password= Запрос.ПараметрыЗапроса.Получить("Password");
13. user623969_dusa 03.07.19 10:08 Сейчас в теме
Логин = Запрос.ПараметрыURL["Login"];
Запрос.ПараметрыЗапроса.Получить("Login");

в зависимости от того где параметр

для приема с УРЛ должен быть шаблон запроса /{Login}/*
для приема со строки или из тела запроса ?Login="" 2й вариант
4. Isa816 64 03.07.19 09:42 Сейчас в теме
Вот допустим

Заголовки = Новый Соответствие;
	Заголовки.Вставить("Authorization", Authorization); 
	Заголовки.Вставить("X-User-Authorization", XUserAuthorization);   
	Заголовки.Вставить("Content-Type", "application/json;charset=UTF-8");
	
	HTTPЗапрос = Новый HTTPЗапрос(Запрос, Заголовки);
	
	HTTPЗапрос.УстановитьИмяФайлаТела(ИмяФайлаОтправки);
	

 	HTTPОтвет = Соединение.ОтправитьДляОбработки(HTTPЗапрос, ИмяВыходногоФайла);
Показать
5. Gendelf 03.07.19 09:45 Сейчас в теме
(4) вы меня не так поняли, мне нужно принят post запрос, а не отправить его.
Чтобы его принять мне нужна либо имитация post запроса в html, либо пример в 1с как получить параметры из параметра функции "Запрос"
Функция AuthorizationПолучить(Запрос)
15. Isa816 64 03.07.19 10:16 Сейчас в теме
(5) вот этим приложением можно имитировать пост запросы https://www.getpostman.com/
16. Gendelf 03.07.19 10:19 Сейчас в теме
(15) ок, проверяю просто на сервере, имитатор тоже нужно там устанавливать или можно на своём пк?
17. Isa816 64 03.07.19 10:26 Сейчас в теме
(16) Можно на своем ПК и передать пост запросы на ваш сервер.
6. melenaspb 208 03.07.19 09:46 Сейчас в теме
ОтветСервера = Новый Соответствие;
Content_Type = Объект.Content_Type ;
		
ЗаголовокHTTP  = Новый Соответствие;
ЗаголовокHTTP.Вставить("Content-Type",Content_Type);
ЗаголовокHTTP.Вставить("Authorization"," AccessToken " + Объект.ТокенАвторизации);
ЗаголовокHTTP.Вставить( "X-User-Authorization"," Basic " + Объект.КлючАвторизации);
		
ssl =  Новый ЗащищенноеСоединениеOpenSSL( Неопределено, Неопределено );
Попытка
	Соединение = Новый HTTPСоединение( Объект.Host,,,,,0,ssl);
Исключение
	Сообщить("Не удалось установить соединение" + Символы.ПС + ИнформацияОбОшибке().Описание+ " Подготовка и отправка электронной формы Ф103 не выполнена !", СтатусСообщения.Важное);
			Возврат ОтветСервера;
КонецПопытки;
		
HTTPЗапрос  = Новый HTTPЗапрос();
HTTPЗапрос.АдресРесурса = ЛокальныйURL;
HTTPЗапрос.Заголовки = ЗаголовокHTTP ;
		
HTTPОтвет = Соединение.ОтправитьДляОбработки (HTTPЗапрос); //POST !!!
Показать
Merkalov; +1 Ответить
7. Gendelf 03.07.19 09:50 Сейчас в теме
(6) из кода не понятно, как получить параметры? Логин и пароль, что мне прислали с сайта.
9. melenaspb 208 03.07.19 09:59 Сейчас в теме
(7) А что у вас в HTTPСервисОтвет.Заголовки ?
12. Gendelf 03.07.19 10:08 Сейчас в теме
скрин
Прикрепленные файлы:
14. Gendelf 03.07.19 10:13 Сейчас в теме
Запрос.ПараметрыЗапроса.Получить("Login ");

проверю сегодня, хотя бы через Postman
18. tvm 03.07.19 10:40 Сейчас в теме
например, в постмане отправляете через Body
в 1С в шаблонеURL прописываете в "Шаблон" и в обработчике получаете параметры
Прикрепленные файлы:
19. Gendelf 03.07.19 11:39 Сейчас в теме
(18) в POST запросе какой Шаблон прописать? В Get у меня /{Login}/{Password} , в POST ошибка ещё до моего кода. Постмен выдает ошибку 404.
Скорее всего ошибка в этих параметрах. Т.к. параметры могут быть в теле запроса POST, а 1С будет их искать в ссылке.
20. tvm 03.07.19 11:59 Сейчас в теме
(19) Шаблон пропишите любой как нравится. Можете попробовать как на скрине моем.
А как обращаетесь к get и к post из postmana? Имею ввиду адреса
21. Gendelf 03.07.19 12:04 Сейчас в теме
(20) ну как любой... их наверно должно быть два? ) с любым именем?
Прикрепленные файлы:
22. tvm 03.07.19 12:10 Сейчас в теме
23. tvm 03.07.19 12:22 Сейчас в теме
а публикация сервисов сделана?
Попробуйте в шаблоне добавить /{Login}/{Password}
24. Gendelf 03.07.19 12:38 Сейчас в теме
(23) да. Я разобрался. Спасибо за помощь!

Шаблон: /*
Затем в обработчике ТелоЗапроса = Запрос.ПолучитьТелоКакСтроку();


------WebKitFormBoundarybrRuPS8IXUytPud0
Content-Disposition: form-data; name="Login"

МойЛогин
------WebKitFormBoundarybrRuPS8IXUytPud0
Content-Disposition: form-data; name="Password"

МойПароль
------WebKitFormBoundarybrRuPS8IXUytPud0--



Вот щас буду искать, как оттуда вытащить мои значения.
25. tvm 03.07.19 12:46 Сейчас в теме
(24) в теле я видел тоже. но парсить текст конечно не очень хорошо. Пробуйте все же лучше через шаблон получать
26. Gendelf 03.07.19 13:09 Сейчас в теме
(25) Хорошо, но раньше было /{Login}/{Password} и получал ошибку 404.
28. user1365959 28.02.20 10:02 Сейчас в теме
(24) Здравствуйте! Удалось ли найти способ получения параметров из тела запроса, не прибегая к поиску по строке?
29. Gendelf 01.03.20 19:55 Сейчас в теме
(28) да

Запрос.ПараметрыЗапроса.Получить("report_name")


но в шаблонах не указывайте имя, а оставьте пустым или /*
27. tvm 03.07.19 13:37 Сейчас в теме
вот тут достаточно подробно описано про http-сервисы. Рекомендую почитать если не видели
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот