Enviar una matriz con HTTP Get

96

¿Cómo puedo enviar una matriz con una solicitud HTTP Get?

Estoy usando el cliente GWT para enviar la solicitud.

Matteo
fuente
realmente, HTML es mejor para iluminar esto. <input name="user[name]" /> <input name="user[email]" />dentro de un <form>contenedor sabe exactamente cómo enviar de forma predeterminada en todos los navegadores. las entradas se convertirán en `user [name] = SOMETEXT & user [email] [email protected] --- es la aplicación host que se requiere para manejar la decodificación de nuevo en una matriz
Garet Claborn

Respuestas:

154

Eso depende de lo que acepte el servidor de destino. No existe un estándar definitivo para esto. Véase también ao Wikipedia: Cadena de consulta :

Si bien no existe un estándar definitivo, la mayoría de los marcos web permiten que se asocien múltiples valores con un solo campo (p field1=value1&field1=value2&field2=value3. Ej .). [4] [5]

Generalmente, cuando el servidor de destino usa un lenguaje de programación de tipo fuerte como Java ( Servlet ), entonces puede enviarlos como múltiples parámetros con el mismo nombre. La API generalmente ofrece un método dedicado para obtener múltiples valores de parámetros como una matriz.

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

El request.getParameter("foo")también va a trabajar en él, sino que va a devolver sólo el primer valor.

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

Y, cuando el servidor de destino utiliza un lenguaje de tipado débil como PHP o RoR, entonces debe agregar el sufijo al nombre del parámetro con llaves []para que el lenguaje devuelva una matriz de valores en lugar de un solo valor.

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

En caso de que aún lo use foo=value1&foo=value2&foo=value3, devolverá solo el primer valor.

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

Tenga en cuenta que cuando envía foo[]=value1&foo[]=value2&foo[]=value3a un Servlet de Java, aún puede obtenerlos, pero deberá usar el nombre exacto del parámetro, incluidas las llaves.

String[] foo = request.getParameterValues("foo[]"); // [value1, value2, value3]
BalusC
fuente
cuando el servidor usa nodeJs, simplemente puede pasar la matriz como foo = [valor1, valor2, valor3]. Cuando obtenga esta ruta expresa interna con req.query, obtendrá {foo: '[valor1, valor2, valor3]'}. Solo necesita analizarlo y usar esta matriz en su código
Akshay Barpute
184

Sé que esta publicación es muy antigua, pero tengo que responder porque aunque la respuesta de BalusC está marcada como correcta, no es completamente correcta.

Tienes que escribir la consulta agregando "[]" a foo así:

foo[]=val1&foo[]=val2&foo[]=val3
David Roman
fuente
5
¡Me alegro de que hayas respondido a esta publicación anterior! Definitivamente ayudó.
Tha Leang
@BalusC incorrecto, esto funciona perfectamente bien en C / C ++ / C # (y puede funcionar en Java). Es solo su uso de Java lo que hace que los nombres idénticos se interpreten como tales. Sin embargo
Garet Claborn