Передача значения параметров --data-urlencoded и --data из curl в POST HTTP-запросе 1С одновременно

1. MaCCapAkIII 18.01.24 13:35 Сейчас в теме
Приветствую.
Разбираюсь сейчас в программной авторизации из 1С в GitLab. Нашел интересный метод, реализованный при помощи curl + perl здесь. Но на данный момент есть нюанс. Не понимаю как передать параметры curl -data и --data-urlencoded в одном http-запросе.
Имеем команду curl с параметрами:
curl -b cookies.txt -c cookies.txt -i "${gitlab_host}/users/sign_in" \
	--data "user[login]=${gitlab_user}&user[password]=${gitlab_password}" \
	--data-urlencode "authenticity_token=${csrf_token}"

Тут передаются куки из прошлого запроса (передаем в заголовке HTTP-запроса 1С) и значения данных, которые в теории надо передавать в теле запроса, то есть через УстановитьТелоИзСтроки(). Прошу подсказать, если кто-то сталкивался - каким образом передать значения параметра curl --data-urlencoded в HTTP-запросе 1С. Плюс непонятно - передавать логин и пароль пользователя в открытом, незашифрованном виде в теле запроса или в заголовке запроса, но в закодированном виде Base64. Ну и самое главное - как одновременно передать логин, пароль и токен.
Найденные решения
9. starik-2005 3169 19.01.24 12:46 Сейчас в теме
(8)
HTTPЗапросе данные сразу и как data, и как data-urlencoded
Все в дата.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. MaCCapAkIII 19.01.24 10:08 Сейчас в теме
Согласно Postman, если используем заголовок x-www-form-urlencoded, это соответствует передаче значений через параметр --data-urlencoded, или в случае http-запроса 1С УстановитьТелоИзСтроки().
Если же установить заголовок raw, то запрос начнет передавать значения параметра curl --data в виде обычного текста. В этом обсуждении коллега спрашивал, как заставить 1С передавать именно значения параметра --data-urlencode вместо --data, и ему подсказали как раз про УстановитьТелоИзСтроки(). В моем же случае получается, что в алгоритме авторизации к GitLab необходимо в одном из последовательных запросов передавать значения сразу с двумя параметрами.
Прикрепленные файлы:
3. user1880116 19.01.24 11:28 Сейчас в теме
(2)
Согласно Postman
Тот же postman вполне умеет показывать сниппет для http, из которого предельно ясно, что идет в заголовки, что в тело, а что в url и в какой кодировке.

Но, если ты хочешь стоя и в гамаке, то у curl есть своя подробная документация. См, например, https://curl.se/docs/manpage.html#-d
4. MaCCapAkIII 19.01.24 11:38 Сейчас в теме
(3)
Тот же postman вполне умеет показывать сниппет для http, из которого предельно ясно, что идет в заголовки, что в тело, а что в url и в какой кодировке.
полностью согласен, в (2) как раз и прикрепил скрины содержимого этих сниппетов. Дело все в том, что если curl может передавать в одном запросе сразу и --data и --data-urlencode, то как это сделать в Postman, и уж тем более в HTTPЗапрос пока не нашел. Об этом и тема.
5. user1880116 19.01.24 11:40 Сейчас в теме
(4)
прикрепил скрины содержимого этих сниппетов
Прикрепленные файлы:
6. MaCCapAkIII 19.01.24 11:48 Сейчас в теме
(5) Понял, о чем Вы говорите. Но вопрос остался открытым: HTTPЗапрос 1C в заголовке может содержать оба типа Content-Type? И как в таком случае ему указать какая часть тела запроса должна идти как Text, а какая - как urlencoded?
7. user1880116 19.01.24 11:52 Сейчас в теме
(6)Нет, и 1С тут не при чем. В одном запросе заголовок типа тела распространяется на всё тело. Поэтому у тебя всё будет урленкодед. Постман тебе это и показывает.

Давно бы уже попробовал отправить запрос из того же постмана...
starik-2005; +1 Ответить
8. MaCCapAkIII 19.01.24 11:54 Сейчас в теме
(7) Уже много раз попробовал. Поэтому сюда и пришел за советом. Для программной авторизации в GitLab мне необходимо, аналогично curl, отправить из 1С в HTTPЗапросе данные сразу и как data, и как data-urlencoded.
9. starik-2005 3169 19.01.24 12:46 Сейчас в теме
(8)
HTTPЗапросе данные сразу и как data, и как data-urlencoded
Все в дата.
10. MaCCapAkIII 19.01.24 13:19 Сейчас в теме
(9) В таком случае, насколько я понимаю, HTTP запросом из 1С не получится отправить данные в требуемом формате, чтобы GitLab их принял на странице LDAP авторизации? Мне необходимо работать с GitLab не по API, а именно авторизовавшись через LDAP...
11. user1880116 19.01.24 13:46 Сейчас в теме
(10)
авторизовавшись через LDAP
Вот это вот сейчас вообще внезапно было.
Я, пожалуй, теперь просто посижу рядом и почитаю - что же на это ответят?
12. MaCCapAkIII 19.01.24 13:58 Сейчас в теме
(11) Почему же внезапная? В шапке темы указал, что "разбираюсь с программной авторизацией в GitLab". Сервер GitLab у заказчика развернут, когда я захожу через браузер первое, что вижу - это страница LDAP авторизации. В (10) говорю именно про нее. Когда производится первый программный (цель: получить страницу с изменениями коммита и загрузить ее в поле HTML документа на форму) запрос страницы изменений GitLab в формате https://gitlab.com/.../-/commit/0f37fd6a23.....e78178599562ea090b71d4fe0 ответ перенаправляет на страницу авторизации, куда (по всей видимости) необходимо отправить запрос с использованием cookie и csrf-токена. В виде последовательности curl-запросов реализация есть, теперь пробую адаптировать ее для 1С.
Прикрепленные файлы:
13. MaCCapAkIII 25.01.24 11:07 Сейчас в теме
В итоге пришел к следующему.
1. Два последовательных запроса обеспечивают авторизацию - токен безопасности и куки прилагаются в соответствующем составе;
2. Третий запрос должен получить непосредственно страницу HTML из репозитория, к которому идет запрос и при помощи ПолучитьТелоКакСтроку() отдать текст HTML в поле HTML-документа, размещенное на УФ.
По факту все так и происходит, но в поле HTML-документа отображается только панель меню GitLab слева, содержимое страницы не отображается, хотя тело ответа на запрос содержит полны текст HTML-страницы репозитория (в конфигураторе это видно). Теперь разбираюсь с этим этапом.
Оставьте свое сообщение

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