Имя: Пароль:
1C
 
Работа с 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
^^^ дополнение:

Вот эти строки:
ЗаписьДанных.ЗаписатьСтроку("");

с ними надо играться. По крайней мере тот ресурс, для которого я писал этот код - он требовал пустые строки.
Другой может не требовать
AdBlock убивает бесплатный контент. 1Сергей