|
Массив в строку (http_build_query) | ☑ | ||
---|---|---|---|---|
0
Zyka
02.06.14
✎
13:07
|
Доброго времени суток, прошу вашей помощи. Есть необходимость отправки запроса на сайт, запрос представляет собой многоуровневый массив, который судя по php библиотеке (прилагаемой) перед отправкой преобразовывается в строку методом "http_build_query", пример:
if (isset($data)) { $post_body = http_build_query($data*); curl_setopt($curl, CURLOPT_POST, true); curl_setopt($curl, CURLOPT_POSTFIELDS, $post_body); } *где $data многоуровневый массив. Никак не выходит преобразоваться массив 1С в строку, имеется прекрасный метод "КодироватьСтроку", однако само его название говорит за себя. Если же имеется выход в данный ситуации, буду очень признателен. Спасибо. |
|||
1
Zyka
02.06.14
✎
13:26
|
Пытался имитировать массив создавая изначально его php строкой, после пользовался функцией "КодироватьСтроку" и вроде как похоже, но это ужас, т.к. обрабатываться будет большое количество данных и использование данного метода не ок, хотя если раздуплиться касательно создания многуровневого массива строкой, может будет проще. помогите!)
|
|||
2
Ислам
02.06.14
✎
13:41
|
(0) Очень хорошо оформлена просьба помочь. Мне нравится. Если бы я знал как, я бы помог.
Всем советую подсказать человеку если знаете ответ на вопрос. |
|||
3
Segate
02.06.14
✎
13:50
|
(0)а что мешает написаль такую процедуру? Судя по документации там нет ничего особо сложного, за исключением представлений элементов.
string http_build_query ( mixed $query_data [, string $numeric_prefix [, string $arg_separator [, int $enc_type = PHP_QUERY_RFC1738 ]]] ) Если навскидку, то берем массив, обходим его рекурсивно, и пихаем в строку через разделитель. Для того чтоб наши параметры были правильными, надо наваять правильный массив. но это уже совсем другая история |
|||
4
Zyka
02.06.14
✎
16:29
|
(2) (3) Спасибо за то что не обошли вниманием.
(3) Концепция ясна, буду пробовать формировать массив по указанной структуре. Спасибо. Однако, думаю тема ещё не закрыта. |
|||
5
Zyka
05.06.14
✎
10:37
|
Можно закрывать.
|
|||
6
CPU0
05.06.14
✎
17:47
|
(0)(3)(5) JSON?
|
|||
7
CPU0
05.06.14
✎
17:48
|
||||
8
Zyka
09.06.14
✎
17:15
|
У меня имеются обработки для преобразования структуры (сложной, с вложенными массивами) в JSON, но в данном случае требовалось отправка в формате PHP, возможно кому то будет полезно.
("Content-Type", "multipart/form-data; boundary=My1cV8bNdr") ****************************** Индекс = 0; ФайлОтправки = Новый ЗаписьТекста(ИмяФайлаОтправки); ФайлОтправки.ЗаписатьСтроку("--My1cV8bNdr"); ФайлОтправки.ЗаписатьСтроку("content-disposition: form-data; name=""login""" + Символы.ВК + Символы.ПС); ФайлОтправки.ЗаписатьСтроку("--My1cV8bNdr"); ФайлОтправки.ЗаписатьСтроку("--My1cV8bNdr"); ФайлОтправки.ЗаписатьСтроку("content-disposition: form-data; name=""login""" + Символы.ВК + Символы.ПС); ФайлОтправки.ЗаписатьСтроку(СтруктураОтвета.login); ФайлОтправки.ЗаписатьСтроку("--My1cV8bNdr"); ФайлОтправки.ЗаписатьСтроку("--My1cV8bNdr"); ФайлОтправки.ЗаписатьСтроку("content-disposition: form-data; name=""token""" + Символы.ВК + Символы.ПС); ФайлОтправки.ЗаписатьСтроку("--My1cV8bNdr"); ФайлОтправки.ЗаписатьСтроку("--My1cV8bNdr"); ФайлОтправки.ЗаписатьСтроку("content-disposition: form-data; name=""token""" + Символы.ВК + Символы.ПС); ФайлОтправки.ЗаписатьСтроку(СтруктураОтвета.token); ФайлОтправки.ЗаписатьСтроку("--My1cV8bNdr"); //обработка массива Для Каждого Стр Из Массив Цикл ФайлОтправки.ЗаписатьСтроку("--My1cV8bNdr"); ФайлОтправки.ЗаписатьСтроку("content-disposition: form-data; name=""orders[" + Строка(Индекс) + "][sku]""" + Символы.ВК + Символы.ПС); ФайлОтправки.ЗаписатьСтроку(Формат(Доставка.Номер, "ЧЦ=11")); ФайлОтправки.ЗаписатьСтроку("--My1cV8bNdr"); ФайлОтправки.ЗаписатьСтроку("--My1cV8bNdr"); ФайлОтправки.ЗаписатьСтроку("content-disposition: form-data; name=""orders[" + Строка(Индекс) + "][price]""" + Символы.ВК + Символы.ПС); ФайлОтправки.ЗаписатьСтроку(Доставка.ОценочнаяСтоимость); ФайлОтправки.ЗаписатьСтроку("--My1cV8bNdr"); ФайлОтправки.ЗаписатьСтроку("--My1cV8bNdr"); ФайлОтправки.ЗаписатьСтроку("content-disposition: form-data; name=""orders[" + Строка(Индекс) + "][payed]""" + Символы.ВК + Символы.ПС); ФайлОтправки.ЗаписатьСтроку(1); ФайлОтправки.ЗаписатьСтроку("--My1cV8bNdr"); ФайлОтправки.ЗаписатьСтроку("--My1cV8bNdr"); ФайлОтправки.ЗаписатьСтроку("content-disposition: form-data; name=""orders[" + Строка(Индекс) + "][buyer_phone]""" + Символы.ВК + Символы.ПС); ФайлОтправки.ЗаписатьСтроку(Доставка.Телефон); ФайлОтправки.ЗаписатьСтроку("--My1cV8bNdr"); ФайлОтправки.ЗаписатьСтроку("--My1cV8bNdr"); ФайлОтправки.ЗаписатьСтроку("content-disposition: form-data; name=""orders[" + Строка(Индекс) + "][buyer_fio]""" + Символы.ВК + Символы.ПС); ФайлОтправки.ЗаписатьСтроку(Доставка.КонтактноеЛицо); ФайлОтправки.ЗаписатьСтроку("--My1cV8bNdr"); ФайлОтправки.ЗаписатьСтроку("--My1cV8bNdr"); ФайлОтправки.ЗаписатьСтроку("content-disposition: form-data; name=""orders[" + Строка(Индекс) + "][comment]""" + Символы.ВК + Символы.ПС); ФайлОтправки.ЗаписатьСтроку(Доставка.ДополнительнаяИнформация); ФайлОтправки.ЗаписатьСтроку("--My1cV8bNdr"); Индекс = Индекс + 1; КонецЦикла; ФайлОтправки.Закрыть(); Как понятно из этого кода, составление даже многоуровневых массивов теперь не составляет труда. |
|||
9
Segate
09.06.14
✎
17:28
|
(8) а нельзя скажем параметры хранить в структурах(лучше на стороне клиента, чтоб список параметров можно было бы "на лету" изменять) и обходить эту хрень в цикле... кораздо же изящнее будет
|
|||
10
Zyka
09.06.14
✎
17:36
|
Да, разумеется это всё после было вынесено в константы, я тоже не терплю всяких НайтиПоКоду(), однако надо было решить вопрос в контексте "чтобы работало", в таком виде код простоял менее 2х часов. Спасибо за замечание.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |