Прошу помощи отправить файл через POST

1. anton.fly7 173 31.01.18 15:10 Сейчас в теме
Прошу помочь с отправкой файла (jpg) на сервер через POST запрос за вознаграждение (в рублях на карту)

в описании API такой хелп https://yadi.sk/i/moOyJ18I3Rx6tH

дополнительно POST должен быть зашифрован

простой тест отправляю нормально (аргумент msg)
картинку никак отправить не могу

Адрес = "api/contact_message_post/16235613/";
POST = "msg=text";

Message = Nonce + Аккаунт.Key + "/" + Адрес + POST;
	
Signature = ВРег(ЗашифроватьSHA256(Message, Аккаунт.Secret));
		
HTTPЗапрос = Новый HTTPЗапрос;
HTTPЗапрос.АдресРесурса = Адрес;
HTTPЗапрос.Заголовки.Вставить("Accept-Language", "ru-RU");
HTTPЗапрос.Заголовки.Вставить("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393");
HTTPЗапрос.Заголовки.Вставить("Accept", "text/html, application/xhtml+xml, image/jxr, */*");
HTTPЗапрос.Заголовки.Вставить("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");

HTTPЗапрос.Заголовки.Вставить("Apiauth-Key", Аккаунт.Key);
HTTPЗапрос.Заголовки.Вставить("Apiauth-Nonce", Nonce);
HTTPЗапрос.Заголовки.Вставить("Apiauth-Signature", Signature);

HTTPЗапрос.УстановитьТелоИзСтроки(POST);

Соединение = Новый HTTPСоединение(Хост, 443,,, Прокси, 11, ssl);

ОтветHTTP = Соединение.ОтправитьДляОбработки(HTTPЗапрос);
Показать
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. anton.fly7 173 31.01.18 15:12 Сейчас в теме
пробовал так (2 варианта) не работает :(

	POST = "document=chek.jpg";// + Base64Строка(ПолучитьИзВременногоХранилища(АдресХран));
	
	Message = Nonce + Аккаунт.Key + "/" + Адрес + POST;
	
	Signature = ВРег(МодульСервер.ЗашифроватьSHA256(Message, Аккаунт.Secret));
	
	Boundary = "----" + СтрЗаменить(Строка(Новый УникальныйИдентификатор()), "-", "");
	
	ФайлОтправки = ПолучитьИмяВременногоФайла("txt");
	ЗаписьТекста = Новый ЗаписьТекста(ФайлОтправки);
	ЗаписьТекста.ЗаписатьСтроку(Boundary);
	ЗаписьТекста.ЗаписатьСтроку("Content-Disposition: form-data; name=""document""; filename=chek.jpg");
	ЗаписьТекста.ЗаписатьСтроку("Content-Type: image/jpeg");
	ЗаписьТекста.ЗаписатьСтроку("");
	ЗаписьТекста.Записать(Base64Строка(ПолучитьИзВременногоХранилища(АдресХран)));
	ЗаписьТекста.ЗаписатьСтроку("");
	ЗаписьТекста.ЗаписатьСтроку(Boundary);
	ЗаписьТекста.Закрыть();	
	
	HTTPЗапрос = Новый HTTPЗапрос;
	HTTPЗапрос.АдресРесурса = Адрес;
	HTTPЗапрос.Заголовки.Вставить("Accept-Language", 	"ru-RU");
	HTTPЗапрос.Заголовки.Вставить("User-Agent", 		"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393");
	HTTPЗапрос.Заголовки.Вставить("Accept", 			"text/html, application/xhtml+xml, image/jxr, */*");
	HTTPЗапрос.Заголовки.Вставить("Content-Type", 		"multipart/form-data; boundary=" + boundary + "");
	HTTPЗапрос.Заголовки.Вставить("Apiauth-Key", 		Аккаунт.Key);
	HTTPЗапрос.Заголовки.Вставить("Apiauth-Nonce", 		Nonce);
	HTTPЗапрос.Заголовки.Вставить("Apiauth-Signature", 	Signature);
	//HTTPЗапрос.УстановитьТелоИзСтроки(POST);
	HTTPЗапрос.УстановитьИмяФайлаТела(ФайлОтправки);
	
	ssl = Новый ЗащищенноеСоединениеOpenSSL(Новый СертификатКлиентаWindows(), Новый СертификатыУдостоверяющихЦентровWindows());
	Соединение = Новый HTTPСоединение(Хост, 443,,,, 15, ssl);
Показать
3. VasilVtoroy 31.01.18 15:14 Сейчас в теме
4. anton.fly7 173 31.01.18 15:31 Сейчас в теме
сделал так, приходит ответ что не верная подпись. подозреваю что переменную POST передаю на подпись не ту

	POST = "document=chek.jpg";
	
	Message = Nonce + Аккаунт.Key + "/" + Адрес + POST;
	
	Signature = ВРег(МодульСервер.ЗашифроватьSHA256(Message, Аккаунт.Secret));
	
	Boundary = СтрЗаменить(Строка(Новый УникальныйИдентификатор()), "-", "");
	
	ПотокТело = Новый ПотокВПамяти();
	ЗаписьДанных = Новый ЗаписьДанных(ПотокТело);
	ЗаписьДанных.ЗаписатьСтроку("==" + Boundary);
	ЗаписьДанных.Записать(СоздатьСообщение_Изображение("document", "chek.jpg", ПолучитьИзВременногоХранилища(АдресХран)));
	ЗаписьДанных.ЗаписатьСтроку("==" + Boundary + "==");
	ЗаписьДанных.Закрыть();
	
	ДвоичныеДанныеТело = ПотокТело.ЗакрытьИПолучитьДвоичныеДанные();
	
	HTTPЗапрос = Новый HTTPЗапрос;
	HTTPЗапрос.АдресРесурса = Адрес;
	HTTPЗапрос.Заголовки.Вставить("Accept-Language", 	"ru-RU");
	HTTPЗапрос.Заголовки.Вставить("User-Agent", 		"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393");
	HTTPЗапрос.Заголовки.Вставить("Accept", 			"text/html, application/xhtml+xml, image/jxr, */*");
	HTTPЗапрос.Заголовки.Вставить("Content-Type", 		"multipart/form-data; boundary=" + boundary + "");
	HTTPЗапрос.Заголовки.Вставить("Apiauth-Key", 		Аккаунт.Key);
	HTTPЗапрос.Заголовки.Вставить("Apiauth-Nonce", 		Nonce);
	HTTPЗапрос.Заголовки.Вставить("Apiauth-Signature", 	Signature);
	HTTPЗапрос.УстановитьТелоИзДвоичныхДанных(ДвоичныеДанныеТело);
	
	Соединение = Новый HTTPСоединение(Хост, 443,,,, 15, Новый ЗащищенноеСоединениеOpenSSL(Новый СертификатКлиентаWindows(), Новый СертификатыУдостоверяющихЦентровWindows()));
	
	ОтветHTTP = Соединение.ОтправитьДляОбработки(HTTPЗапрос);
	
	Ответ = ОтветHTTP.ПолучитьТелоКакСтроку();


Функция СоздатьСообщение_Изображение(ИмяСообщения, ИмяФайла, ДвоичныеДанные)
	
	Поток = Новый ПотокВПамяти();
	ЗаписьДанных = Новый ЗаписьДанных(Поток);
	
	ЗаписьДанных.ЗаписатьСтроку("Content-Disposition: form-data; name=" + ИмяСообщения + "; filename=" + ИмяФайла);
	ЗаписьДанных.ЗаписатьСтроку("Content-Type: image/jpeg");
	ЗаписьДанных.ЗаписатьСтроку("");

	ЗаписьДанных.Записать(ДвоичныеДанные);
	
	ЗаписьДанных.Закрыть();
	
	Возврат Поток.ЗакрытьИПолучитьДвоичныеДанные();
	
КонецФункции
Показать
Оставьте свое сообщение

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