Как отправить массив значений в 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 263 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) Это уже отправка. Весь вопрос был именно в правильном содержании СтрокаЗапроса из Вашего примера.
Оставьте свое сообщение
Вакансии
Программист 1С
Казань
зарплата от 150 000 руб.
Полный день

Разработчик 1С
Москва
зарплата от 200 000 руб. до 300 000 руб.
Полный день

Программист 1С (удаленно)
Самара
зарплата от 230 000 руб. до 230 000 руб.
Полный день

Руководитель группы разработки 1С
Москва
зарплата от 250 000 руб. до 250 000 руб.
Полный день

Специалист техподдержки
Санкт-Петербург
зарплата от 100 руб. до 150 руб.
Полный день