2012-03-28 14 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は読みやすさのために合理的な形式である:

{"stuff":"yes", 
"listThing":[1,2,3], 
"listObjects":[{"one":"thing"},{"two":"thing2"}]} 

通常-dは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でない場合、その例外をスローするクロージャによって作成時にも設定されます。あなたがここにソースコードを確認することができます

:サイドノートでhttps://fisheye.codehaus.org/browse/gmod/httpbuilder/trunk/src/main/java/groovyx/net/http/HTTPBuilder.java?hb=true

を、HTTP 1.1仕様ではGETが身体を持つことができないことをあからさま言いませんが、それは、要求の意味がdoesnの場合と言っていますそのような要求を受け取ったサーバーはそれを無視する必要があります。

ほとんどの人はこの慣習に慣れているので、GET要求を送信するときには、実際にサービスを利用しないようにしてください。

この質問もご覧ください:HTTP GET with request body

関連する問題