Envoyer un tableau avec un HTTP Get

96

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

J'utilise le client GWT pour envoyer la demande.

Matteo
la source
vraiment, HTML est meilleur pour éclairer cela. <input name="user[name]" /> <input name="user[email]" />à l'intérieur d'un <form>conteneur sait exactement comment soumettre par défaut dans tous les navigateurs. les entrées deviendront `user [name] = SOMETEXT & user [email] [email protected] --- c'est l'application hôte qui est nécessaire pour gérer le décodage dans un tableau
Garet Claborn

Réponses:

154

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

Bien qu'il n'y ait pas de norme définitive, la plupart des frameworks 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 fortement typé tel que Java ( Servlet ), vous pouvez simplement les envoyer en tant que paramètres multiples avec le même nom. L'API propose généralement une méthode dédiée pour obtenir plusieurs valeurs de paramètres sous forme de tableau.

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

Le request.getParameter("foo")fonctionnera également dessus, mais il ne retournera que la première valeur.

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

Et, lorsque le serveur cible utilise un langage typé faible comme PHP ou RoR, vous devez alors suffixer le nom du paramètre avec des accolades []afin de déclencher le langage pour renvoyer 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

Au cas où vous l'utilisez encore 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 devez utiliser le nom exact du paramètre, y compris les accolades.

String[] foo = request.getParameterValues("foo[]"); // [value1, value2, value3]
BalusC
la source
quand le serveur utilise nodeJs, vous pouvez simplement passer le tableau comme toto = [valeur1, valeur2, valeur3] .Lorsque vous obtenez cette route express interne avec req.query, vous obtiendrez {toto: '[valeur1, valeur2, valeur3]'}. Il vous suffit de l'analyser et d'utiliser ce tableau dans votre code
Akshay Barpute
184

Je sais que ce post est vraiment vieux, mais je dois répondre car bien que la réponse de BalusC soit marquée comme correcte, elle n'est pas complètement correcte.

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

foo[]=val1&foo[]=val2&foo[]=val3
David Roman
la source
5
Heureux que vous ayez répondu à cet ancien message! Cela a vraiment aidé.
Tha Leang
@BalusC incorrect, cela fonctionne parfaitement bien en C / C ++ / C # (et peut fonctionner en java). C'est uniquement votre utilisation de Java qui fait que des noms identiques sont interprétés comme tels. Votre réponse est cependant une utilisation incorrecte du formatage URI
Garet Claborn