groovy – HTTPBuilder在GET方法上设置requestBody
使用cURL我可以发送一个正文的GET请求.例:
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,"listObjects":[{"one":"thing"},{"two":"thing2"}]} 通常-d会告诉cURL发送POST但是我已经确认-X GET正在覆盖它并且它正在发送GET.是否可以使用HTTPBuilder复制它? 我已经做好了: 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 } 哪个有效,但如果我将.post更改为.get,我会收到错误消息: 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 有没有办法使用HTTPBuilder发送请求正文的GET? 解决方法
简答:不.
答案很长:HTTPBuilder不允许您在实际创建请求之外的任何时间为请求设置HTTP方法. 您可以在此处查看源代码:https://fisheye.codehaus.org/browse/gmod/httpbuilder/trunk/src/main/java/groovyx/net/http/HTTPBuilder.java?hb=true 另外,HTTP 1.1规范并未直接说明GET不能拥有正文,但是它表示如果请求语义不允许,那么就不能提供它,并且不能提供它,并且接收到这样的服务器请求应该忽略它. 由于大多数人习惯于这种惯例,我建议坚持使用它,并且在发送GET请求时不要让您的服务实际使用正文. 另见这个问题:HTTP GET with request body (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |