Как отправить массив значений в POST запросе

1. MAXXL 13 08.05.21 11:47 Сейчас в теме
Подскажите, как из 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]=зеленый";
Имя и ИД передаются нормально, а массив-нет. Как правильно его задавать?
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
13. ptolomei 21.05.21 09:47 Сейчас в теме
(1) Если на принимающей стороне нужен именно массив значений, а не массив структур, то попробуй так написать
massive1["color"][]=" + ЗакодироватьСтроку("зеленый")&massive1["color"][]=" + ЗакодироватьСтроку("желтый")
15. MAXXL 13 21.05.21 13:15 Сейчас в теме
(13) А что за функция "ЗакодироватьСтроку"? Что-то в СП не нашлось ничего
16. ptolomei 21.05.21 15:44 Сейчас в теме
(15)
ЗакодироватьСтроку
своя, которая затем вызывает метод КодироватьСтроку()
2. Leon75 08.05.21 12:46 Сейчас в теме
МассивЦветов = Новый Массив;
МассивЦветов.Добавить("желтый");
МассивЦветов.Добавить("зеленый");
СтруктураЦветов = Новый Структура ("цвет", МассивЦветов);
СтруктураЗапроса = Новый Структура(" name, tipe_id, massive1", XMLСтрока("имя"), XMLСтрока(1), СтруктураЦветов);
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписатьJSON(ЗаписьJSON, СтруктураЗапроса);
Результат = ЗаписьJSON.Закрыть();
Проверьте очередность параметров по СП. С телефона пишу.
3. Global__IT 270 08.05.21 12:50 Сейчас в теме
Примерно так, но json формируйте через объект ЗаписьJSON. И тогда все получится
4. MAXXL 13 08.05.21 13:56 Сейчас в теме
попробовал, но не то. получается что я не совсем правильно понял - нужна не JSON строка, а урл кодированная строка.
через фиддлер подобрал нужную последовательность - получается такая строка
"name=имя&type_id=1&features[color][2]=желтый&features[color][3]=зеленый";
можно ли какой-то готовой функцией например ТЗ features с полями color, id, value разбирать в такую строку features[color][2]=желтый&features[color][3]=зеленый ?
5. Leon75 08.05.21 18:52 Сейчас в теме
(4)то есть вы не видите разницы между post и get?
6. MAXXL 13 10.05.21 10:16 Сейчас в теме
(5)Я знаю разницу между POST и GET, и тут GET нет. В данном случае меня ввела в заблуждение запутанная документация сервиса которому я отправлял данные. понял так, что нужно отправлять строку в JSON.
7. Leon75 10.05.21 11:01 Сейчас в теме
(6)Есть шанс, что сервис, если ему нужен application/x-www-form-urlencoded в POST может скушать и multipart/form-data
Не экспериментировали?
Можно сформировать через ЗаписьДанных и попытаться отправить.
9. Leon75 11.05.21 21:30 Сейчас в теме
(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? В ТС его нет.

Вот текст запроса, который отправляю через curl и он правильно работает
'name' => 'имя',
'type_id' => '1',
'massive1' => [
'color' => [
2 => 'желтый',
3 => 'зеленый',
]
]
];
10. MAXXL 13 12.05.21 09:04 Сейчас в теме
(9)вот я тоже когда экспериментировал то собирал строку с massive1[0].... но с той стороны давало ошибку. далее и выяснилось что там не JSON, и в этом все дело
11. Leon75 12.05.21 10:46 Сейчас в теме
(10)Встроенных функций/методов 1С для encodejson2url или encodestruct2url нет. Обычно делают все элементарной конкатенацией. Можно, конечно вызвать Python из 1С, в нем вроде есть. Но проще написать свою функцию и не из json, а из прикладных типов, там если не брать фиксированные коллекции, три исходящих будет для парса и сборки: строка(так как другие примитивные типы через XMLСтроку), Соответствие, Массив. А КодироватьСтроку для строки.
8. hamsar 15 11.05.21 19:41 Сейчас в теме
вот ручное преобразование с примером по массиву в json Рабочее
Прикрепленные файлы:
Новый1.txt
12. tka4enk0 144 17.05.21 14:46 Сейчас в теме
я так понял что нужно вот это
	Заголовки = Новый Соответствие();
	Заголовки.Вставить("Content-Type","application/x-www-form-urlencoded");
	Запрос = Новый HTTPЗапрос("/token",Заголовки);
	СтрокаЗапроса = "&grant_type=password" + 
	"&username=" + КодироватьСтроку(ДанныеДляАвторизации.Логин,СпособКодированияСтроки.КодировкаURL) +
	"&password=" + КодироватьСтроку(ДанныеДляАвторизации.Пароль,СпособКодированияСтроки.КодировкаURL);
	Запрос.УстановитьТелоИзСтроки(СтрокаЗапроса,КодировкаТекста.UTF8,ИспользованиеByteOrderMark.НеИспользовать);
	Соединение = Новый HTTPСоединение("------",443,,,,,Новый ЗащищенноеСоединениеOpenSSL(Неопределено,Неопределено),);
	Ответ = Соединение.ОтправитьДляОбработки(Запрос);
	ОтветСтрока = Ответ.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8);
Показать
14. MAXXL 13 21.05.21 13:14 Сейчас в теме
(12) Это уже отправка. Весь вопрос был именно в правильном содержании СтрокаЗапроса из Вашего примера.
Оставьте свое сообщение

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