发送带有HTTP Get的数组


95

如何发送带有HTTP Get请求的数组?

我正在使用GWT客户端发送请求。


实际上,HTML更好地说明了这一点。容器<input name="user[name]" /> <input name="user[email]" />内部<form>完全知道默认情况下如何在所有浏览器中提交。输入将变成`user [name] = SOMETEXT&user [email] =SOME@TEXT.com ---它是主机应用程序,它需要处理解码回数组
Garet Claborn,

Answers:


153

这取决于目标服务器接受什么。没有明确的标准。另请参见Wikipedia:查询字符串

尽管没有明确的标准,但是大多数Web框架都允许将多个值与单个字段(例如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 Servlet时,仍然可以获取它们,但是需要使用包括括号在内的确切参数名称。

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

当服务器使用nodeJs时,您可以简单地将数组作为foo = [value1,value2,value3]传递。当您使用req.query在内部快速路由中获得此数组时,您将获得{foo:'[value1,value2,value3]'}。你只需要对它进行解析和使用这个数组,在你的代码
阿克沙伊Barpute

184

我知道这篇文章确实很老,但是我必须回复,因为尽管BalusC的回答被标记为正确,但它并不完全正确。

您必须像这样向foo添加查询,添加“ []”:

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

5
很高兴您回复了此旧帖子!它肯定有帮助。
Tha Leang 2014年

@BalusC错误,这在C / C ++ / C#中可以很好地工作(并且可以在Java中工作)。只是您对Java的使用会导致相同名称的解释。你的回答是URI的不正确使用格式化但是
杰拉尔德Claborn
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.