Приветствую.
Разбираюсь сейчас в программной авторизации из 1С в GitLab. Нашел интересный метод, реализованный при помощи curl + perl здесь. Но на данный момент есть нюанс. Не понимаю как передать параметры curl -data и --data-urlencoded в одном http-запросе.
Имеем команду curl с параметрами:
Тут передаются куки из прошлого запроса (передаем в заголовке HTTP-запроса 1С) и значения данных, которые в теории надо передавать в теле запроса, то есть через УстановитьТелоИзСтроки(). Прошу подсказать, если кто-то сталкивался - каким образом передать значения параметра curl --data-urlencoded в HTTP-запросе 1С. Плюс непонятно - передавать логин и пароль пользователя в открытом, незашифрованном виде в теле запроса или в заголовке запроса, но в закодированном виде Base64. Ну и самое главное - как одновременно передать логин, пароль и токен.
Согласно Postman, если используем заголовок x-www-form-urlencoded, это соответствует передаче значений через параметр --data-urlencoded, или в случае http-запроса 1С УстановитьТелоИзСтроки().
Если же установить заголовок raw, то запрос начнет передавать значения параметра curl --data в виде обычного текста. В этом обсуждении коллега спрашивал, как заставить 1С передавать именно значения параметра --data-urlencode вместо --data, и ему подсказали как раз про УстановитьТелоИзСтроки(). В моем же случае получается, что в алгоритме авторизации к GitLab необходимо в одном из последовательных запросов передавать значения сразу с двумя параметрами.
Тот же postman вполне умеет показывать сниппет для http, из которого предельно ясно, что идет в заголовки, что в тело, а что в url и в какой кодировке.
Тот же postman вполне умеет показывать сниппет для http, из которого предельно ясно, что идет в заголовки, что в тело, а что в url и в какой кодировке.
полностью согласен, в (2) как раз и прикрепил скрины содержимого этих сниппетов. Дело все в том, что если curl может передавать в одном запросе сразу и --data и --data-urlencode, то как это сделать в Postman, и уж тем более в HTTPЗапрос пока не нашел. Об этом и тема.
(5) Понял, о чем Вы говорите. Но вопрос остался открытым: HTTPЗапрос 1C в заголовке может содержать оба типа Content-Type? И как в таком случае ему указать какая часть тела запроса должна идти как Text, а какая - как urlencoded?
(6)Нет, и 1С тут не при чем. В одном запросе заголовок типа тела распространяется на всё тело. Поэтому у тебя всё будет урленкодед. Постман тебе это и показывает.
Давно бы уже попробовал отправить запрос из того же постмана...
(7) Уже много раз попробовал. Поэтому сюда и пришел за советом. Для программной авторизации в GitLab мне необходимо, аналогично curl, отправить из 1С в HTTPЗапросе данные сразу и как data, и как data-urlencoded.
(9) В таком случае, насколько я понимаю, HTTP запросом из 1С не получится отправить данные в требуемом формате, чтобы GitLab их принял на странице LDAP авторизации? Мне необходимо работать с GitLab не по API, а именно авторизовавшись через LDAP...
(11) Почему же внезапная? В шапке темы указал, что "разбираюсь с программной авторизацией в GitLab". Сервер GitLab у заказчика развернут, когда я захожу через браузер первое, что вижу - это страница LDAP авторизации. В (10) говорю именно про нее. Когда производится первый программный (цель: получить страницу с изменениями коммита и загрузить ее в поле HTML документа на форму) запрос страницы изменений GitLab в формате https://gitlab.com/.../-/commit/0f37fd6a23.....e78178599562ea090b71d4fe0 ответ перенаправляет на страницу авторизации, куда (по всей видимости) необходимо отправить запрос с использованием cookie и csrf-токена. В виде последовательности curl-запросов реализация есть, теперь пробую адаптировать ее для 1С.
В итоге пришел к следующему.
1. Два последовательных запроса обеспечивают авторизацию - токен безопасности и куки прилагаются в соответствующем составе;
2. Третий запрос должен получить непосредственно страницу HTML из репозитория, к которому идет запрос и при помощи ПолучитьТелоКакСтроку() отдать текст HTML в поле HTML-документа, размещенное на УФ.
По факту все так и происходит, но в поле HTML-документа отображается только панель меню GitLab слева, содержимое страницы не отображается, хотя тело ответа на запрос содержит полны текст HTML-страницы репозитория (в конфигураторе это видно). Теперь разбираюсь с этим этапом.