Как отправить массив значений в POST запросе
Подскажите, как из 1С отправить POST запрос в котором есть массивы
Вот текст запроса, который отправляю через curl и он правильно работает
'name' => 'имя',
'type_id' => '1',
'massive1' => [
'color' => [
2 => 'желтый',
3 => 'зеленый',
]
]
];
Пробовал сделать так:
ЗапросВ = Новый HTTPЗапрос();
ЗапросВ.Заголовки = Заголовки;
СтрокаJSON = КодироватьСтроку(стрЗапрос, СпособКодированияСтроки.URLВКодировкеURL);
ЗапросВ.УстановитьТелоИзСтроки(СтрокаJSON);
Соединение.ОтправитьДляОбработки(ЗапросВ);
в стрЗапрос строку такого вида
стрТовара = "name=имя&type_id=1&massive1[color][2]=желтый&massive1[color][3]=зеленый";
Имя и ИД передаются нормально, а массив-нет. Как правильно его задавать?
Вот текст запроса, который отправляю через curl и он правильно работает
'name' => 'имя',
'type_id' => '1',
'massive1' => [
'color' => [
2 => 'желтый',
3 => 'зеленый',
]
]
];
Пробовал сделать так:
ЗапросВ = Новый HTTPЗапрос();
ЗапросВ.Заголовки = Заголовки;
СтрокаJSON = КодироватьСтроку(стрЗапрос, СпособКодированияСтроки.URLВКодировкеURL);
ЗапросВ.УстановитьТелоИзСтроки(СтрокаJSON);
Соединение.ОтправитьДляОбработки(ЗапросВ);
в стрЗапрос строку такого вида
стрТовара = "name=имя&type_id=1&massive1[color][2]=желтый&massive1[color][3]=зеленый";
Имя и ИД передаются нормально, а массив-нет. Как правильно его задавать?
По теме из базы знаний
Ответы
В избранное
Подписаться на ответы
Сортировка:
Древо развёрнутое
Свернуть все
МассивЦветов = Новый Массив;
МассивЦветов.Добавить("желтый");
МассивЦветов.Добавить("зеленый");
СтруктураЦветов = Новый Структура ("цвет", МассивЦветов);
СтруктураЗапроса = Новый Структура(" name, tipe_id, massive1", XMLСтрока("имя"), XMLСтрока(1), СтруктураЦветов);
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписатьJSON(ЗаписьJSON, СтруктураЗапроса);
Результат = ЗаписьJSON.Закрыть();
Проверьте очередность параметров по СП. С телефона пишу.
МассивЦветов.Добавить("желтый");
МассивЦветов.Добавить("зеленый");
СтруктураЦветов = Новый Структура ("цвет", МассивЦветов);
СтруктураЗапроса = Новый Структура(" name, tipe_id, massive1", XMLСтрока("имя"), XMLСтрока(1), СтруктураЦветов);
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписатьJSON(ЗаписьJSON, СтруктураЗапроса);
Результат = ЗаписьJSON.Закрыть();
Проверьте очередность параметров по СП. С телефона пишу.
попробовал, но не то. получается что я не совсем правильно понял - нужна не JSON строка, а урл кодированная строка.
через фиддлер подобрал нужную последовательность - получается такая строка
"name=имя&type_id=1&features[color][2]=желтый&features[color][3]=зеленый";
можно ли какой-то готовой функцией например ТЗ features с полями color, id, value разбирать в такую строку features[color][2]=желтый&features[color][3]=зеленый ?
через фиддлер подобрал нужную последовательность - получается такая строка
"name=имя&type_id=1&features[color][2]=желтый&features[color][3]=зеленый";
можно ли какой-то готовой функцией например ТЗ features с полями color, id, value разбирать в такую строку features[color][2]=желтый&features[color][3]=зеленый ?
(6)Вообще если в массиве пары ключ-значение и аналог json должен выглядеть вот так:
{
"name": "имя",
"type_id": "1",
"massive1": [
{
"color": [
{
"2": "Желтый"
},
{
"3": "Зеленый"
}
]
}
]
}
То application/x-www-form-urlencoded "name=имя&type_id=1&massive1[0][color][0][2]=желтый&massive1[0][color][1][3]=зеленый"
Сначала получаем элемент массива по индексу, потом обращаемся к ключу
Откуда вы взяли ключ features? В ТС его нет.
{
"name": "имя",
"type_id": "1",
"massive1": [
{
"color": [
{
"2": "Желтый"
},
{
"3": "Зеленый"
}
]
}
]
}
То application/x-www-form-urlencoded "name=имя&type_id=1&massive1[0][color][0][2]=желтый&massive1[0][color][1][3]=зеленый"
Сначала получаем элемент массива по индексу, потом обращаемся к ключу
Откуда вы взяли ключ features? В ТС его нет.
Вот текст запроса, который отправляю через curl и он правильно работает
'name' => 'имя',
'type_id' => '1',
'massive1' => [
'color' => [
2 => 'желтый',
3 => 'зеленый',
]
]
];
'name' => 'имя',
'type_id' => '1',
'massive1' => [
'color' => [
2 => 'желтый',
3 => 'зеленый',
]
]
];
(10)Встроенных функций/методов 1С для encodejson2url или encodestruct2url нет. Обычно делают все элементарной конкатенацией. Можно, конечно вызвать Python из 1С, в нем вроде есть. Но проще написать свою функцию и не из json, а из прикладных типов, там если не брать фиксированные коллекции, три исходящих будет для парса и сборки: строка(так как другие примитивные типы через XMLСтроку), Соответствие, Массив. А КодироватьСтроку для строки.
я так понял что нужно вот это
Заголовки = Новый Соответствие();
Заголовки.Вставить("Content-Type","application/x-www-form-urlencoded");
Запрос = Новый HTTPЗапрос("/token",Заголовки);
СтрокаЗапроса = "&grant_type=password" +
"&username=" + КодироватьСтроку(ДанныеДляАвторизации.Логин,СпособКодированияСтроки.КодировкаURL) +
"&password=" + КодироватьСтроку(ДанныеДляАвторизации.Пароль,СпособКодированияСтроки.КодировкаURL);
Запрос.УстановитьТелоИзСтроки(СтрокаЗапроса,КодировкаТекста.UTF8,ИспользованиеByteOrderMark.НеИспользовать);
Соединение = Новый HTTPСоединение("------",443,,,,,Новый ЗащищенноеСоединениеOpenSSL(Неопределено,Неопределено),);
Ответ = Соединение.ОтправитьДляОбработки(Запрос);
ОтветСтрока = Ответ.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8);
Показать