加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

groovy – HTTPBuilder在GET方法上设置requestBody

发布时间:2020-12-14 16:27:39 所属栏目:大数据 来源:网络整理
导读:使用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":"
使用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方法.
参数也是在由闭包创建时设置的,该闭包检查请求的类型,如果请求不是HttpEntityEnclosingRequest类型,则抛出该异常.

您可以在此处查看源代码: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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读