web-dev-qa-db-fra.com

Envoyer un tableau avec un HTTP Get

Comment puis-je envoyer un tableau avec une requête HTTP Get?

J'utilise le client GWT pour envoyer la demande.

82
Matteo

Cela dépend de ce que le serveur cible accepte. Il n'y a pas de norme définitive pour cela. Voir aussi a.o. Wikipedia: chaîne de requête :

Bien qu’il n’existe pas de norme définitive, la plupart des infrastructures Web permettent d’associer plusieurs valeurs à un seul champ (par exemple, field1=value1&field1=value2&field2=value3).[4][5]

En règle générale, lorsque le serveur cible utilise un langage de programmation fort tel que Java ( Servlet ), vous pouvez simplement les envoyer en tant que paramètres multiples portant le même nom. L’API propose généralement une méthode dédiée pour obtenir plusieurs valeurs de paramètre sous forme de tableau.

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

La request.getParameter("foo") fonctionnera également, mais ne renverra que la première valeur.

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

Et, lorsque le serveur cible utilise un langage faiblement typé tel que PHP ou RoR, vous devez suffixer le paramètre nom avec des accolades [] pour que le langage renvoie un tableau de valeurs au lieu d’une valeur unique.

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

Si vous utilisez toujours foo=value1&foo=value2&foo=value3, Il ne renverra que la première valeur.

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

Notez que lorsque vous envoyez foo[]=value1&foo[]=value2&foo[]=value3 À un servlet Java, vous pouvez toujours les obtenir, mais vous devrez utiliser le nom exact du paramètre, y compris les accolades.

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

Je sais que ce message est vraiment ancien, mais je dois répondre car, bien que la réponse de BalusC soit marquée comme correcte, elle n’est pas tout à fait correcte.

Vous devez écrire la requête en ajoutant "[]" à foo comme ceci:

foo[]=val1&foo[]=val2&foo[]=val3
173
David Roman