Envie um Array com um HTTP Get

95

Como posso enviar um Array com uma solicitação HTTP Get?

Estou usando o cliente GWT para enviar a solicitação.

Matteo
fonte
realmente, o HTML é melhor em iluminar isso. <input name="user[name]" /> <input name="user[email]" />dentro de um <form>contêiner sabe exatamente como enviar por padrão em todos os navegadores. as entradas se tornarão `usuário [nome] = SOMETEXT & usuário [email] [email protected] --- é o aplicativo host que é necessário para lidar com a decodificação de volta em uma matriz
Garet Claborn

Respostas:

153

Isso depende do que o servidor de destino aceita. Não existe um padrão definitivo para isso. Veja também ao Wikipedia: Query string :

Embora não haja um padrão definitivo, a maioria das estruturas da web permite que vários valores sejam associados a um único campo (por exemplo field1=value1&field1=value2&field2=value3). [4] [5]

Geralmente, quando o servidor de destino usa uma linguagem de programação de tipo forte como Java ( Servlet ), você pode simplesmente enviá-los como vários parâmetros com o mesmo nome. A API geralmente oferece um método dedicado para obter vários valores de parâmetro como uma matriz.

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

O request.getParameter("foo")também funcionará nisso, mas retornará apenas o primeiro valor.

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

E, quando o servidor de destino usa uma linguagem de tipo fraco , como PHP ou RoR, você precisa sufocar o nome do parâmetro com colchetes []para acionar a linguagem para retornar uma matriz de valores em vez de um único valor.

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

Caso você ainda use foo=value1&foo=value2&foo=value3, ele retornará apenas o primeiro valor.

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

Observe que, ao enviar foo[]=value1&foo[]=value2&foo[]=value3para um Servlet Java, você ainda pode obtê-los, mas precisará usar o nome exato do parâmetro incluindo as chaves.

String[] foo = request.getParameterValues("foo[]"); // [value1, value2, value3]
BalusC
fonte
quando o servidor usa nodeJs, você pode simplesmente passar array como foo = [valor1, valor2, valor3]. Ao obter esta rota expressa interna com req.query, você obterá {foo: '[valor1, valor2, valor3]'}. Você só precisa analisá-lo e usar esta matriz em seu código
Akshay Barpute
184

Sei que esta postagem é muito antiga, mas tenho que responder porque embora a resposta do BalusC esteja marcada como correta, ela não está totalmente correta.

Você deve escrever a consulta adicionando "[]" ao foo assim:

foo[]=val1&foo[]=val2&foo[]=val3
David Roman
fonte
5
Que bom que você respondeu a este post antigo! Definitivamente ajudou.
Tha Leang
@BalusC incorreto, funciona perfeitamente bem em C / C ++ / C # (e pode funcionar em java). É apenas o seu uso de Java que faz com que nomes idênticos sejam interpretados como tais. No entanto, sua resposta é o uso incorreto da formatação URI
Garet Claborn