Senden Sie ein Array mit einem HTTP-Get

95

Wie kann ich ein Array mit einer HTTP-Get-Anfrage senden?

Ich verwende den GWT-Client, um die Anfrage zu senden.

Matteo
quelle
HTML ist wirklich besser darin, dies zu beleuchten. <input name="user[name]" /> <input name="user[email]" />innerhalb eines <form>Containers weiß genau, wie standardmäßig in allen Browsern gesendet werden soll. Eingaben werden zu `user [name] = SOMETEXT & user [email] [email protected] --- es ist die Host-Anwendung, die erforderlich ist, um die Dekodierung zurück in ein Array
durchzuführen

Antworten:

153

Das hängt davon ab, was der Zielserver akzeptiert. Hierfür gibt es keinen endgültigen Standard. Siehe auch Wikipedia: Abfragezeichenfolge :

Obwohl es keinen endgültigen Standard gibt, erlauben die meisten Web-Frameworks, dass einem einzelnen Feld mehrere Werte zugeordnet werden (z field1=value1&field1=value2&field2=value3. B. ). [4] [5]

Wenn der Zielserver eine stark typisierte Programmiersprache wie Java ( Servlet ) verwendet, können Sie diese im Allgemeinen einfach als mehrere Parameter mit demselben Namen senden. Die API bietet normalerweise eine dedizierte Methode, um mehrere Parameterwerte als Array zu erhalten.

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

Das request.getParameter("foo")wird auch funktionieren, aber es wird nur der erste Wert zurückgegeben.

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

Wenn der Zielserver eine schwach typisierte Sprache wie PHP oder RoR verwendet, müssen Sie den Parameternamen mit geschweiften Klammern versehen [], damit die Sprache ein Array von Werten anstelle eines einzelnen Werts zurückgibt .

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

Wenn Sie immer noch verwenden foo=value1&foo=value2&foo=value3, wird nur der erste Wert zurückgegeben.

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

Beachten Sie, dass Sie beim Senden foo[]=value1&foo[]=value2&foo[]=value3an ein Java-Servlet diese weiterhin erhalten können, jedoch den genauen Parameternamen einschließlich der geschweiften Klammern verwenden müssen.

String[] foo = request.getParameterValues("foo[]"); // [value1, value2, value3]
BalusC
quelle
Wenn der Server nodeJs verwendet, können Sie das Array einfach als foo = [Wert1, Wert2, Wert3] übergeben. Wenn Sie diese Express-Route mit req.query erhalten, erhalten Sie {foo: '[Wert1, Wert2, Wert3]'}. Sie müssen es nur analysieren und dieses Array in Ihrem Code verwenden
Akshay Barpute
184

Ich weiß, dass dieser Beitrag wirklich alt ist, aber ich muss antworten, denn obwohl die Antwort von BalusC als richtig markiert ist, ist sie nicht ganz richtig.

Sie müssen die Abfrage schreiben und "[]" wie folgt hinzufügen:

foo[]=val1&foo[]=val2&foo[]=val3
David Roman
quelle
5
Schön, dass du auf diesen alten Beitrag geantwortet hast! Es hat definitiv geholfen.
Tha Leang
@BalusC falsch, dies funktioniert einwandfrei in C / C ++ / C # (und kann in Java funktionieren). Nur Ihre Verwendung von Java führt dazu, dass identische Namen als solche interpretiert werden. Ihre Antwort ist jedoch eine falsche Verwendung der URI-Formatierung
Garet Claborn