Проблема с отправкой HTTP POST multipart/from-data
Доброе время суток! Коллеги, кто встречал такую ошибку? Вроде простой запрос. Нужно отправить файл. Просмотрела все примеры, как только не пробовала, получаю один и тот же ответ 400 "{"errors":{"":["Failed to read the request form. Line length limit 16384 exceeded."]},"
РазделительСтрок="test";
ПотокВПамяти = Новый ПотокВПамяти();
ЗаписьДанных = Новый ЗаписьДанных(ПотокВПамяти);
ЗаписьДанных.ЗаписатьСтроку("--" + РазделительСтрок);
ЗаписьДанных.Записать(ДвоичныеДанные);
//ЗаписьДанных.ЗаписатьСтроку("");
ЗаписьДанных.ЗаписатьСтроку("--" + РазделительСтрок+ "--");
ЗаписьДанных.Закрыть();
ТелоЗапроса = ПотокВПамяти.ЗакрытьИПолучитьДвоичныеДанные();
Заголовки = Новый Соответствие();
Заголовки.Вставить("Content-Type","multipart/form-data; boundary=" + РазделительСтрок);
Запрос = Новый HTTPЗапрос("api/file", Заголовки);
Запрос.УстановитьТелоИзДвоичныхДанных(ТелоЗапроса);
Token = ПолучитьТокенBnNet();
Запрос.Заголовки.Вставить("Authorization", "Bearer "+Token);
SSL = Новый ЗащищенноеСоединениеOpenSSL;
Соединение =Новый HTTPСоединение(АдресСервисаPartners,,,,,,SSL);
Ответ = Соединение.ОтправитьДляОбработки(Запрос);
Сообщить(Ответ.КодСостояния);
ссответа = Ответ.ПолучитьТелоКакСтроку("UTF-8");
Сообщить(ссответа);
РазделительСтрок="test";
ПотокВПамяти = Новый ПотокВПамяти();
ЗаписьДанных = Новый ЗаписьДанных(ПотокВПамяти);
ЗаписьДанных.ЗаписатьСтроку("--" + РазделительСтрок);
ЗаписьДанных.Записать(ДвоичныеДанные);
//ЗаписьДанных.ЗаписатьСтроку("");
ЗаписьДанных.ЗаписатьСтроку("--" + РазделительСтрок+ "--");
ЗаписьДанных.Закрыть();
ТелоЗапроса = ПотокВПамяти.ЗакрытьИПолучитьДвоичныеДанные();
Заголовки = Новый Соответствие();
Заголовки.Вставить("Content-Type","multipart/form-data; boundary=" + РазделительСтрок);
Запрос = Новый HTTPЗапрос("api/file", Заголовки);
Запрос.УстановитьТелоИзДвоичныхДанных(ТелоЗапроса);
Token = ПолучитьТокенBnNet();
Запрос.Заголовки.Вставить("Authorization", "Bearer "+Token);
SSL = Новый ЗащищенноеСоединениеOpenSSL;
Соединение =Новый HTTPСоединение(АдресСервисаPartners,,,,,,SSL);
Ответ = Соединение.ОтправитьДляОбработки(Запрос);
Сообщить(Ответ.КодСостояния);
ссответа = Ответ.ПолучитьТелоКакСтроку("UTF-8");
Сообщить(ссответа);
Ответы
В избранное
Подписаться на ответы
Сортировка:
Древо развёрнутое
Свернуть все
Отсылаем две картинки, пример
Инструкция:
1) вначале нужно проверить доступность сервера, куда отсылаешь. Иначе, дальнейшие шаги не имеют смысла.
--- доступ по ключу, паролю (проверка)
2) потом можно отправить готовый файл (картинку)
3) потом можно собрать в коде 1с файл и его отправить
Соединение = Новый HTTPСоединение("server.ru",443,,,,,Новый ЗащищенноеСоединениеOpenSSL);
&НаКлиенте
Процедура Проверить3(Команда)
//подготавливаем вложенные сообщения
ДвоичныеДанные1 = ПодготовитьКартинку("image1", "image1.png", БиблиотекаКартинок.АктивироватьЗадачу);
ДвоичныеДанные2 = ПодготовитьКартинку("image2", "image2.png", БиблиотекаКартинок.АктивныеПользователи);
Разделитель = "boundary";
//устанавливаем заголовки основного сообщения
Заголовки = Новый Соответствие();
Заголовки.Вставить("Content-Type", "multipart/form-data; boundary=" + Разделитель);
//формируем основное сообщение
ПотокВПамяти = Новый ПотокВПамяти();
ЗаписьДанных = Новый ЗаписьДанных(ПотокВПамяти);
ЗаписьДанных.ЗаписатьСтроку("--"+Разделитель);
ЗаписьДанных.Записать(ДвоичныеДанные1);
ЗаписьДанных.ЗаписатьСтроку("");
ЗаписьДанных.ЗаписатьСтроку("--"+Разделитель);
ЗаписьДанных.Записать(ДвоичныеДанные2);
ЗаписьДанных.ЗаписатьСтроку("");
ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель + "--");
ЗаписьДанных.Закрыть();
ТелоЗапроса = ПотокВПамяти.ЗакрытьИПолучитьДвоичныеДанные();
//отправляем данные скрипту
Соединение = Новый HTTPСоединение("server.ru",443,,,,,Новый ЗащищенноеСоединениеOpenSSL);
Запрос = Новый HTTPЗапрос("/script.php", Заголовки);
Запрос.УстановитьТелоИзДвоичныхДанных(ТелоЗапроса);
Ответ = Соединение.ОтправитьДляОбработки(Запрос);
Сообщить(Ответ.ПолучитьТелоКакСтроку());
КонецПроцедуры
&НаКлиенте
Функция ПодготовитьКартинку(Название, ИмяФайла, Картинка)
Поток = Новый ПотокВПамяти();
ЗаписьДанных = Новый ЗаписьДанных(Поток);
//устанавливаем заголовки
ЗаписьДанных.ЗаписатьСтроку("Content-Disposition: form-data; name=" + Название + "; filename=" + ИмяФайла);
ЗаписьДанных.ЗаписатьСтроку("Content-Type: image/png");
ЗаписьДанных.ЗаписатьСтроку("");
ЗаписьДанных.Записать(Картинка.ПолучитьДвоичныеДанные());
ЗаписьДанных.Закрыть();
Возврат Поток.ЗакрытьИПолучитьДвоичныеДанные();
КонецФункции
ПоказатьИнструкция:
1) вначале нужно проверить доступность сервера, куда отсылаешь. Иначе, дальнейшие шаги не имеют смысла.
--- доступ по ключу, паролю (проверка)
2) потом можно отправить готовый файл (картинку)
3) потом можно собрать в коде 1с файл и его отправить
(2)
Написала как Вы ответили. Только файл не картинка а ворд.
Но получаю ответ "{"errors":{"":["Failed to read the request form. Invalid header line: test"]},"type":"https://tools.ietf.org/html/rfc7231#section-6.5.1","title":"One or more validation errors occurred.","status":400,"traceId":"|f401a655-47c30fc8af09eb53."}"(((
Поток = Новый ПотокВПамяти();
ЗаписьДанных = Новый ЗаписьДанных(Поток);
//устанавливаем заголовки
ЗаписьДанных.ЗаписатьСтроку("Content-Disposition: form-data; name=" + Название + "; filename=" + ИмяФайла);
ЗаписьДанных.ЗаписатьСтроку("Content-Type: image/png");
ЗаписьДанных.ЗаписатьСтроку("");
ЗаписьДанных.Записать(Картинка.ПолучитьДвоичныеДанные());
ЗаписьДанных.Закрыть();
Возврат Поток.ЗакрытьИПолучитьДвоичныеДанные();
ПоказатьЗаписьДанных = Новый ЗаписьДанных(Поток);
//устанавливаем заголовки
ЗаписьДанных.ЗаписатьСтроку("Content-Disposition: form-data; name=" + Название + "; filename=" + ИмяФайла);
ЗаписьДанных.ЗаписатьСтроку("Content-Type: image/png");
ЗаписьДанных.ЗаписатьСтроку("");
ЗаписьДанных.Записать(Картинка.ПолучитьДвоичныеДанные());
ЗаписьДанных.Закрыть();
Возврат Поток.ЗакрытьИПолучитьДвоичныеДанные();
Написала как Вы ответили. Только файл не картинка а ворд.
Но получаю ответ "{"errors":{"":["Failed to read the request form. Invalid header line: test"]},"type":"https://tools.ietf.org/html/rfc7231#section-6.5.1","title":"One or more validation errors occurred.","status":400,"traceId":"|f401a655-47c30fc8af09eb53."}"(((
Вакансии
1С-Программист (интегратор Битрикс24)
Санкт-Петербург
зарплата от 150 000 руб. до 250 000 руб.
Полный день
Санкт-Петербург
зарплата от 150 000 руб. до 250 000 руб.
Полный день