2012-03-28 5 views
5

cURL을 사용하면 본문과 함께 GET 요청을 보낼 수 있습니다. 예 : 다음HTTPBuilder가 GET 메소드에서 requestBody를 설정합니다.

curl -i -X GET http://localhost:8081/myproject/someController/l2json -H "content-type: application/json" -d "{\"stuff\":\"yes\",\"listThing\":[1,2,3],\"listObjects\":[{\"one\":\"thing\"},{\"two\":\"thing2\"}]}" 

는 가독성을 위하여 합리적인 형식으로 JSON을 수 있습니다 :

일반적으로 -d
{"stuff":"yes", 
"listThing":[1,2,3], 
"listObjects":[{"one":"thing"},{"two":"thing2"}]} 

가 POST를 보낼 컬을 말할 것이다 그러나 나는 -X GET가 재정의되고 있음을 확인하고 그것이 GET 보내기. HTTPBuilder로 이것을 복제 할 수 있습니까?

은 내가 행한 :

작동하지만, 내가 .post .get로 변경하면 나는 오류 얻을
def http = new HTTPBuilder('http://localhost:8081/') 

http.post(path:'/myproject/myController/l2json', body:jsonMe, requestContentType:ContentType.JSON) { resp -> 
    println "Tweet response status: ${resp.statusLine}" 
    assert resp.statusLine.statusCode == 200 
} 

:

Cannot set a request body for a GET method. Stacktrace follows: 
Message: Cannot set a request body for a GET method 
Line | Method 
->> 1144 | setBody    in groovyx.net.http.HTTPBuilder$RequestConfigDelegate 

사용하여 요청 본문과 GET을 보낼 수있는 방법이 있나요을 HTTPBuilder?

답변

2

짧은 답변 : 제

긴 답변 : HTTPBuilder는 실제로 요청을 만들 때 이외의 시간에 요청에 대한 HTTP 방법을 설정하지 않습니다. 매개 변수는 요청 유형을 확인하고 요청이 HttpEntityEnclosingRequest 유형이 아닌 경우 해당 예외를 throw하는 클로저에 의해 작성시 설정됩니다.

당신은 여기에 소스 코드를 확인할 수는 HTTP 1.1 사양은 GET은 몸을 가질 수 있음을 크게 말하지 않는다, 보조 노트에 https://fisheye.codehaus.org/browse/gmod/httpbuilder/trunk/src/main/java/groovyx/net/http/HTTPBuilder.java?hb=true

을하지만 요청 의미는 아무튼 경우 말한다 하나를 허용하면 제공되지 않아야하며 그러한 요청을받는 서버는이를 무시해야합니다.

대부분의 사람들은 그 대회에 익숙하기 때문에 GET 요청을 보낼 때 본문을 실제로 사용하지 않는 것이 좋습니다.

이 질문을 참조하십시오 : HTTP GET with request body

관련 문제