post запрос form-data

1. login1020 133 13.01.21 12:31 Сейчас в теме
Подскажите, как правильно написать, то, что на скрине в постмане?

у меня код ниже выдает 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Ответ.ПолучитьТелоКакСтроку());
Показать
Прикрепленные файлы:
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. login1020 133 14.01.21 00:33 Сейчас в теме +0.5 $m
вроде разобрался

&НаКлиенте
Процедура Отправить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", РазмерСодержимого);
	
КонецПроцедуры
Показать
Yahin; METAL; denisros; daho; user1503726; +5 Ответить
3. denisros 29.08.21 14:41 Сейчас в теме
Здравствуйте!
Столкнулся с такой же проблемой при попытке авторизации в 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--

При запросе через постман всё проходит корректно
5. denisros 11.10.21 23:54 Сейчас в теме
(3) так и не смог ничего умнее придумать, кроме как написать небольшой сервис на django, который при post запросе от 1с авторизуется на сайте и передаёт товары в 1с. Благо это факультатив, на проде такое нехорошо наверное делать
4. user715241 22.09.21 17:09 Сейчас в теме
form-data Аутентификация через куки.

Может кто-то подскажет что я делаю не так...?

Код С# возвращает куки те же что и 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);
Ответ = Соединение.ОтправитьДляОбработки(Запрос);
Показать
Оставьте свое сообщение

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