使用 HTTP 获取发送数组

2022-08-31 08:36:43

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

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


答案 1

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

您必须编写查询,将“[]”添加到 foo 中,如下所示:

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

答案 2

这取决于目标服务器接受的内容。对此没有明确的标准。另请参阅 a.o. 维基百科:查询字符串

虽然没有明确的标准,但大多数Web框架允许将多个值与单个字段相关联(例如)。[4][5]field1=value1&field1=value2&field2=value3

通常,当目标服务器使用像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

请注意,当您发送到 Java Servlet 时,您仍然可以获取它们,但您需要使用确切的参数名称,包括大括号。foo[]=value1&foo[]=value2&foo[]=value3

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