Подскажите, как правильно написать, то, что на скрине в постмане?
у меня код ниже выдает 404 хотя адрес,
если передавать логин и пароль, как строку Json, то все 0к, но тогда токен не возвращает, нужно имено через form data
у меня код ниже выдает 404 хотя адрес,
если передавать логин и пароль, как строку Json, то все 0к, но тогда токен не возвращает, нужно имено через form data
HTTPСоединение = Новый HTTPСоединение(ПодлючениеHttp.Адрес,,,,,,ПодлючениеHttp.ЗащищенноеСоединениеOpenSSL);
ЗапросHTTP = Новый HTTPЗапрос(ПодлючениеHttp.Адрес + ПодлючениеHttp.URLlogin);
ФайлЗапроса = ПолучитьимяВременногоФайла("txt");
Boundary = СтрЗаменить(Строка(Новый УникальныйИдентификатор()), "-", "");
ЗаписьТекста = Новый ЗаписьТекста(ФайлЗапроса, КодировкаТекста.UTF8);
// параметр "login"
ЗаписьТекста.ЗаписатьСтроку("--"+boundary);
ЗаписьТекста.ЗаписатьСтроку("Content-Disposition: form-data; name=""login""");
ЗаписьТекста.ЗаписатьСтроку("");
ЗаписьТекста.ЗаписатьСтроку(Логин);
// параметр "password"
ЗаписьТекста.ЗаписатьСтроку("--"+boundary);
ЗаписьТекста.ЗаписатьСтроку("Content-Disposition: form-data; name=""password""");
ЗаписьТекста.ЗаписатьСтроку("");
ЗаписьТекста.ЗаписатьСтроку(Пароль);
ЗаписьТекста.ЗаписатьСтроку("--"+boundary+"--");
ЗаписьТекста.Закрыть();
ФайлОтправки = Новый Файл(ФайлЗапроса);
РазмерФайлаОтправки = XMLСтрока(ФайлОтправки.Размер());
//передадим данные на сервер
ЗаголовокHTTP = Новый Соответствие();
ЗаголовокHTTP.Вставить("Content-Type", "multipart/form-data, boundary="+boundary);
ЗаголовокHTTP.Вставить("Content-Lenght", РазмерФайлаОтправки);
HTTPЗапрос = Новый HTTPЗапрос(ПодлючениеHttp.Адрес + ПодлючениеHttp.URLlogin,ЗаголовокHTTP);
HTTPЗапрос.УстановитьИмяФайлаТела(ФайлОтправки.ПолноеИмя);
HTTPОтвет = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
Ответ = Новый Структура("Код, Заголовки, Текст", HTTPОтвет.КодСостояния, HTTPОтвет.Заголовки, HTTPОтвет.ПолучитьТелоКакСтроку());
ПоказатьПрикрепленные файлы:

По теме из базы знаний
- Удобная отправка HTTP(s) POST запроса
- HTTP POST запрос к УТМ системы ЕГАИС
- .Net в 1С. Асинхронные HTTP запросы, отправка Post нескольких файлов multipart/form-data, сжатие трафика с использованием gzip, deflate, удобный парсинг сайтов и т.д.
- Отправка HTTP запроса в УТМ ЕГАИС. Код функции + обработка.
- REST API multipart/form-data или отправка файлов в nexus
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
вроде разобрался
&НаКлиенте
Процедура ОтправитьFormDATA()
ПодлючениеHttp = ПараметрыПодключенияHttp();
HTTPСоединение = Новый
HTTPСоединение(ПодлючениеHttp.Адрес,,,,,,ПодлючениеHttp.ЗащищенноеСоединениеOpenSSL);
ЗапросHTTP = Новый HTTPЗапрос(ПодлючениеHttp.Метод);
ПоместитьФайлы(ЗапросHTTP);
HTTPОтвет = HTTPСоединение.ОтправитьДляОбработки(ЗапросHTTP);
Ответ = Новый Структура("Код, Заголовки, Текст", HTTPОтвет.КодСостояния, HTTPОтвет.Заголовки, HTTPОтвет.ПолучитьТелоКакСтроку());
КонецПроцедуры
&НаКлиенте
Процедура ПоместитьФайлы(ЗапросHTTP)
Разделитель = СтрЗаменить(Новый УникальныйИдентификатор, "-", "");
РазделительСтрок = Символы.ВК + Символы.ПС;
ИмяФайла = ПолучитьИмяВременногоФайла("txt");
ТекФайл = Новый ТекстовыйДокумент;
ТекФайл.Записать(ИмяФайла);
Файл = Новый Файл(ИмяФайла);
РазмерФайла = Файл.Размер();
БуферДвоичныхДанных = Новый БуферДвоичныхДанных(РазмерФайла);
ФайловыйПоток = Новый ФайловыйПоток(Файл.ПолноеИмя, РежимОткрытияФайла.Открыть);
ФайловыйПоток.Прочитать(БуферДвоичныхДанных, 0, РазмерФайла);
ФайловыйПоток.Закрыть();
ПотокТело = Новый ПотокВПамяти();
ЗаписьДанных = Новый ЗаписьДанных(ПотокТело);
ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель);
ЗаписьДанных.ЗаписатьСтроку("Content-Disposition: form-data; name=""date""");
ЗаписьДанных.ЗаписатьСтроку("");
ЗаписьДанных.ЗаписатьСтроку("11.01.2021");
ЗаписьДанных.ЗаписатьСтроку("");
ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель + "--");
РазмерСодержимого = XMLСтрока(ПотокТело.Размер());
ЗаписьДанных.Закрыть();
ДвоичныеДанныеТело = ПотокТело.ЗакрытьИПолучитьДвоичныеДанные();
ЗапросHTTP.УстановитьТелоИзДвоичныхДанных(ДвоичныеДанныеТело);
ТипКонтента = СтрШаблон("multipart/form-data; boundary=%1", Разделитель);
ЗапросHTTP.Заголовки.Вставить("Content-Type", ТипКонтента);
ЗапросHTTP.Заголовки.Вставить("Content-length", РазмерСодержимого);
КонецПроцедуры
Показать
Здравствуйте!
Столкнулся с такой же проблемой при попытке авторизации в api Opencart.
Пытаюсь авторизоваться таким способом:
В итоге при авторизации получаю сообщение {"error":"Warning: No match for Username and\/or Password."}
При этом в двоичные данные выгружается :
При запросе через постман всё проходит корректно
Столкнулся с такой же проблемой при попытке авторизации в api Opencart.
Пытаюсь авторизоваться таким способом:
&НаКлиенте
Функция СформироватьТело()
Разделитель = "" + СтрЗаменить(Новый УникальныйИдентификатор, "-", "");
// Формируем основное составное сообщение
Результат = Новый Структура();
Заголовки = Новый Соответствие();
Результат.Вставить("Заголовки", Заголовки);
Тело = Новый ПотокВПамяти();
ЗаписьДанных = Новый ЗаписьДанных(Тело);
ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель);
ЗаписьДанных.ЗаписатьСтроку("Content-Disposition: form-data; name=""username""");
ЗаписьДанных.ЗаписатьСтроку("");
ЗаписьДанных.ЗаписатьСтроку(UserName);
ЗаписьДанных.ЗаписатьСтроку("");
ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель);
ЗаписьДанных.ЗаписатьСтроку("Content-Disposition: form-data; name=""password""");
ЗаписьДанных.ЗаписатьСтроку("");
ЗаписьДанных.ЗаписатьСтроку(password);
ЗаписьДанных.ЗаписатьСтроку("");
ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель + "--");
РазмерСодержимого = XMLСтрока(Тело.Размер());
ЗаписьДанных.Закрыть();
ДанныеТела = Тело.ЗакрытьИПолучитьДвоичныеДанные();
Заголовки.Вставить("Accept", "*/*");
Заголовки.Вставить("Host", Сервер);
Заголовки.Вставить("Connection", "keep-alive");
Заголовки.Вставить("Content-Type", СтрШаблон("multipart/form-data; boundary=%1",Разделитель));
Заголовки.Вставить("Cookie", "PHPSESSID=89f41cd9684e6900e1d8a8c396d41ab7; currency=RUB; language=ru");
Заголовки.Вставить("Content-length", РазмерСодержимого);
Результат.Вставить("Тело", ДанныеТела);
Возврат Результат;
КонецФункции
Функция ЗаголовкиGetЗапроса()
Заголовки = Новый Соответствие();
Заголовки.Вставить("Accept", "*/*");
Заголовки.Вставить("Host", Сервер);
Заголовки.Вставить("Connection", "keep-alive");
Заголовки.Вставить("Cookie", "PHPSESSID=89f41cd9684e6900e1d8a8c396d41ab7; currency=RUB; language=ru");
Возврат Заголовки
КонецФункции
&НаКлиенте
Процедура Сформировать(Команда)
СтрокаЗапроса = "/index.php?route=api/login/";
ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL(
Новый СертификатКлиентаWindows(СпособВыбораСертификатаWindows.Авто),
Новый СертификатыУдостоверяющихЦентровWindows());
ДвоичныеДанные = СформироватьТело();
Запрос = Новый HTTPЗапрос;
Запрос.УстановитьТелоИзДвоичныхДанных(ДвоичныеДанные.Тело);
Запрос.Заголовки = ДвоичныеДанные.Заголовки;
Запрос.АдресРесурса = СтрокаЗапроса;
ДвоичныеДанные.Тело.Записать("H:\txt.txt");
Соединение = Новый HTTPСоединение(Сервер,,"","",,,ЗащищенноеСоединение);
ОтветЛогин = Соединение.ОтправитьДляОбработки(Запрос);
Запрос.ПолучитьТелоКакДвоичныеДанные().Записать("H:\txt2.txt");
СоединениеНовый = Новый HTTPСоединение(Сервер,,"","",,,ЗащищенноеСоединение);
СтрокаGetЗапроса = "/index.php?route=api/custom/products";
GetЗапрос = Новый HTTPЗапрос(СтрокаGetЗапроса, ЗаголовкиGetЗапроса());
GetЗапрос.УстановитьТелоИзДвоичныхДанных(ДвоичныеДанные.Тело);
Ответ = СоединениеНовый.Получить(GetЗапрос);
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку());
Данные = ПрочитатьJSON(ЧтениеJSON, Ложь);
КонецПроцедуры
ПоказатьВ итоге при авторизации получаю сообщение {"error":"Warning: No match for Username and\/or Password."}
При этом в двоичные данные выгружается :
--6cbecec8258443168b846790c286e3c6
Content-Disposition: form-data; name="username"
тут указан username
--6cbecec8258443168b846790c286e3c6
Content-Disposition: form-data; name="password"
тут указан password
--6cbecec8258443168b846790c286e3c6--
Content-Disposition: form-data; name="username"
тут указан username
--6cbecec8258443168b846790c286e3c6
Content-Disposition: form-data; name="password"
тут указан password
--6cbecec8258443168b846790c286e3c6--
При запросе через постман всё проходит корректно
form-data Аутентификация через куки.
Может кто-то подскажет что я делаю не так...?
Код С# возвращает куки те же что и postman и далее проходит аутентификацию, а код 1С возвращает не те куки и далее не проходит аутентификацию: {"message":null,"data":{"reauthorize":true}} .
Сервер = "Serv";
Сервис = Service
Логин = "UserLog";
Пароль = "UserPass";
Код C#: рабочий
Код 1С: НЕ рабочий
Может кто-то подскажет что я делаю не так...?
Код С# возвращает куки те же что и postman и далее проходит аутентификацию, а код 1С возвращает не те куки и далее не проходит аутентификацию: {"message":null,"data":{"reauthorize":true}} .
Сервер = "Serv";
Сервис = Service
Логин = "UserLog";
Пароль = "UserPass";
Код C#: рабочий
var client = new RestClient(Сервер + Сервис);
var request = new RestRequest(Method.POST);
request.AddHeader("cache-control", "no-cache");
equest.AddHeader("content-type", "multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW");
request.AddParameter("multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW", "------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"log\"\r\n\r\nUserLog\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"pwd\"\r\n\r\nUserPass\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW--", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Код 1С: НЕ рабочий
Соединение = Новый HTTPСоединение(Сервер,,,,,,Новый ЗащищенноеСоединениеOpenSSL());
Заголовки = Новый Соответствие;
Заголовки.Вставить("cache-control", "no-cache");
Заголовки.Вставить("content-type", "multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW");
Запрос = Новый HTTPЗапрос(Сервис, Заголовки);
СтрокаДляЗапроса = "------WebKitFormBoundary7MA4YWxkTrZu0gW"+Символы.ПС+"Content-Disposition: form-data; name=""log"""+Символы.ПС+Символы.ПС+Логин+Символы.ПС+"------WebKitFormBoundary7MA4YWxkTrZu0gW"+Символы.ПС+"Content-Disposition: form-data; name=""pwd"""+Символы.ПС+Символы.ПС+Пароль+Символы.ПС+"------WebKitFormBoundary7MA4YWxkTrZu0gW--";
Запрос.УстановитьТелоИзСтроки(СтрокаДляЗапроса, КодировкаТекста.UTF8);
Ответ = Соединение.ОтправитьДляОбработки(Запрос);
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот