Надіслати масив за допомогою HTTP Get


96

Як я можу надіслати масив із запитом HTTP Get?

Я використовую клієнт GWT для надсилання запиту.


насправді, HTML краще це висвітлює. <input name="user[name]" /> <input name="user[email]" />всередині <form>контейнера точно знає, як подати за замовчуванням у всіх браузерах. вхідні дані стануть `user [name] = SOMETEXT & user [email] =SOME@TEXT.com --- це хост-програма, яка повинна обробляти декодування назад у масив
Garet Claborn

Відповіді:


154

Це залежить від того, що приймає цільовий сервер. Для цього не існує остаточного стандарту. Дивіться також ao Wikipedia: Рядок запиту :

Хоча остаточного стандарту не існує, більшість веб-фреймворків дозволяють асоціювати кілька значень з одним полем (наприклад field1=value1&field1=value2&field2=value3). [4] [5]

Як правило, коли цільовий сервер використовує сильно набрану мову програмування, як Java ( Servlet ), тоді ви можете просто надіслати їх як кілька параметрів з однаковим іменем. API зазвичай пропонує виділений метод для отримання декількох значень параметрів як масив.

foo=value1&foo=value2&foo=value3
String[] foo = request.getParameterValues("foo"); // [value1, value2, value3]

request.getParameter("foo")Також буде працювати на нього, але він буде повертати тільки перше значення.

String foo = request.getParameter("foo"); // value1

І коли цільовий сервер використовує слабку типову мову, таку як PHP або RoR, тоді вам потрібно суфіксувати ім'я параметра фігурними дужками [], щоб запустити мову, щоб повернути масив значень замість одного значення.

foo[]=value1&foo[]=value2&foo[]=value3
$foo = $_GET["foo"]; // [value1, value2, value3]
echo is_array($foo); // true

Якщо ви все ще використовуєте foo=value1&foo=value2&foo=value3, тоді воно поверне лише перше значення.

$foo = $_GET["foo"]; // value1
echo is_array($foo); // false

Зверніть увагу, що коли ви надсилаєте foo[]=value1&foo[]=value2&foo[]=value3на сервлет Java, ви все одно можете їх отримати, але вам потрібно буде використовувати точну назву параметра, включаючи фігурні дужки.

String[] foo = request.getParameterValues("foo[]"); // [value1, value2, value3]

коли сервер використовує nodeJs, ви можете просто передати масив як foo = [value1, value2, value3]. Коли ви отримаєте це всередині експрес-маршруту за допомогою req.query, ви отримаєте {foo: '[value1, value2, value3]'}. Вам просто потрібно проаналізувати його та використати цей масив у своєму коді
Akshay Barpute

184

Я знаю, що ця публікація справді стара, але я повинен відповісти, бо хоча відповідь BalusC позначена як правильна, вона не є повністю правильною.

Ви повинні написати запит, додавши "[]" до foo так:

foo[]=val1&foo[]=val2&foo[]=val3

5
Радий, що ви відповіли на цей старий пост! Це точно допомогло.
Tha Leang

@BalusC неправильний, це прекрасно працює в C / C ++ / C # (і може працювати в Java). Тільки ваше використання Java змушує тлумачити ідентичні імена як такі. Ваша відповідь полягає у неправильному використанні форматування URI, проте
Гарет Клаборн,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.