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.