HTTP Get으로 배열 보내기


96

HTTP Get 요청으로 어레이를 보내려면 어떻게해야합니까?

요청을 보내기 위해 GWT 클라이언트를 사용하고 있습니다.


사실, HTML이이를 조명하는 데 더 좋습니다. 컨테이너 <input name="user[name]" /> <input name="user[email]" />내부는 <form>모든 브라우저에서 기본적으로 제출하는 방법을 정확히 알고 있습니다. 입력은`user [name] = SOMETEXT & user [email] =SOME@TEXT.com이됩니다. --- 디코딩을 어레이로 다시 처리하는 데 필요한 호스트 응용 프로그램입니다.
Garet Claborn

답변:


154

그것은 대상 서버가 수락하는 것에 달려 있습니다. 이것에 대한 명확한 표준은 없습니다. ao Wikipedia : Query string 참조 :

명확한 표준은 없지만 대부분의 웹 프레임 워크에서는 여러 값을 단일 필드 (예 :)와 연결할 수 있습니다 field1=value1&field1=value2&field2=value3. [4] [5]

일반적으로 대상 서버가 Java ( Servlet ) 와 같은 강력한 유형의 프로그래밍 언어를 사용하는 경우 동일한 이름의 여러 매개 변수로 보낼 수 있습니다. API는 일반적으로 여러 매개 변수 값을 배열로 얻기위한 전용 메소드를 제공합니다.

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

request.getParameter("foo")또한에 작동하지만 그것은 단지 첫 번째 값을 반환 할 수 있습니다.

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

그리고 대상 서버가 PHP 또는 RoR과 같은 약한 유형[] 의 언어를 사용하는 경우 단일 값 대신 값 배열을 반환하도록 언어를 트리거하기 위해 매개 변수 이름에 중괄호를 붙여야 합니다.

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

여전히을 사용하는 경우 foo=value1&foo=value2&foo=value3첫 번째 값만 반환됩니다.

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

foo[]=value1&foo[]=value2&foo[]=value3Java Servlet으로 보낼 때 여전히 얻을 수 있지만 중괄호를 포함한 정확한 매개 변수 이름을 사용해야합니다.

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

서버가 nodeJs를 사용할 때 단순히 배열을 foo = [value1, value2, value3]로 전달할 수 있습니다. req.query로 익스프레스 경로 내에서 이것을 얻으면 {foo : '[value1, value2, value3]'}를 얻게됩니다. 당신은 그것을 구문 분석하고 코드에서이 배열을 사용하기
만하면됩니다

184

이 게시물이 정말 오래되었다는 것을 알고 있지만 BalusC의 답변이 정확하다고 표시되어 있지만 완전히 정확하지는 않기 때문에 답장해야합니다.

다음과 같이 foo에 "[]"를 추가하는 쿼리를 작성해야합니다.

foo[]=val1&foo[]=val2&foo[]=val3

5
이 오래된 게시물에 답장 해 주셔서 감사합니다! 확실히 도움이되었습니다.
타 Leang

@BalusC가 잘못되었습니다. 이것은 C / C ++ / C #에서 완벽하게 작동합니다 (Java에서도 작동 가능). 동일한 이름을 그대로 해석하는 것은 Java를 사용하는 것뿐입니다. 귀하의 대답은 URI 형식의 잘못된 사용입니다
Garet Claborn
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.