|
Работа с api. Параметры в form-data | ☑ | ||
---|---|---|---|---|
0
wannasleep
26.05.23
✎
14:05
|
Параметры в POST запросе к api передаются в формате form-data. В postman я передаю параметры в формате имяПараметра-значение. Вопрос в том, как передать эти параметры в 1с. В интернете наткнулся на передачу картинок, но не понял как это адаптировать под мои параметры
|
|||
1
PR
26.05.23
✎
14:06
|
Продолжайте исследования
|
|||
2
Волшебник
26.05.23
✎
14:10
|
(0) формат называется FormData. Используйте одноимённый объект
https://learn.javascript.ru/formdata |
|||
3
OldCondom
26.05.23
✎
14:16
|
Заголовки = Новый Соответствие;
Заголовки.Вставить("Content-Type", "application/x-www-form-urlencoded"); Запрос = Новый HTTPЗапрос(Адрес, Заголовки) Запрос.УстановитьТелоИзСтроки(&Парам1=ЗначениеПарам1&Парам2=ЗначениеПарам2) Так вроде работает. |
|||
4
Anton1307
26.05.23
✎
16:23
|
СтруктураФайла = Новый Структура;
СтруктураФайла.Вставить("ИмяФайла", "имяфайла.jpg"); СтруктураФайла.Вставить("ТипДанных", "image/jpeg"); СтруктураФайла.Вставить("Данные", Новый ДвоичныеДанные("C:\photo.jpg")); ДанныеЗапроса = Новый Соответствие; ДанныеЗапроса["param1"] = 123.45; ДанныеЗапроса["param2"] = "Это строковый параметр"; ДанныеЗапроса["param3"] = Истина; ДанныеЗапроса["file"] = СтруктураФайла; Разделитель = "AAA_" + СтрЗаменить(Новый УникальныйИдентификатор, "-", "") + "_BBB"; Поток = Новый ПотокВПамяти; ЗаписьДанных = Новый ЗаписьДанных(Поток,,, Символы.ВК + Символы.ПС, ""); Для каждого Элемент Из ДанныеЗапроса Цикл ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель); Имя = Элемент.Ключ; Данные = Элемент.Значение; Если ТипЗнч(Данные) <> Тип("Структура") Тогда // Записываем обычный параметр (строка, число, булево) ЗаписьДанных.ЗаписатьСтроку("Content-Disposition: form-data; name=""" + Имя + """"); ЗаписьДанных.ЗаписатьСтроку(""); ЗаписьДанных.ЗаписатьСтроку(XMLСтрока(Данные)); Иначе // Записываем двоичные данные файла ЗаписьДанных.ЗаписатьСтроку("Content-Disposition: form-data; name=""" + Имя + """; filename=""" + Данные.ИмяФайла + """"); ЗаписьДанных.ЗаписатьСтроку("Content-Type: " + Данные.ТипДанных); ЗаписьДанных.ЗаписатьСтроку(""); Если ТипЗнч(Данные.Данные) = Тип("Строка") Тогда ЗаписьДанных.ЗаписатьСтроку(Данные.Данные); Иначе ЗаписьДанных.Записать(Данные.Данные); КонецЕсли; ЗаписьДанных.ЗаписатьСтроку(""); КонецЕсли; КонецЦикла; ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель + "--"); ЗаписьДанных.Закрыть(); ТелоЗапроса = Поток.ЗакрытьИПолучитьДвоичныеДанные(); // Отправляем запрос Заголовки = Новый Соответствие; Заголовки["Content-Type"] = "multipart/form-data; boundary=" + Разделитель; Заголовки["Content-Length"] = XMLСтрока(ТелоЗапроса.Размер()); Соединение = Новый HTTPСоединение(...); Запрос = Новый HTTPЗапрос(..., Заголовки); Запрос.УстановитьТелоИзДвоичныхДанных(ТелоЗапроса); Ответ = Соединение.ОтправитьДляОбработки(Запрос); |
|||
5
Anton1307
26.05.23
✎
16:24
|
^^^ дополнение:
Вот эти строки: ЗаписьДанных.ЗаписатьСтроку(""); с ними надо играться. По крайней мере тот ресурс, для которого я писал этот код - он требовал пустые строки. Другой может не требовать |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |