gpt4 book ai didi

groovy - HTTPBuilder 在 GET 方法上设置 requestBody

转载 作者:行者123 更新时间:2023-12-04 21:22:22 28 4
gpt4 key购买 nike

使用 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,2,3],
"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 方法。
参数也在创建时由闭包设置,该闭包检查请求的类型,如果请求不是 HttpEntityEnclosureRequest 类型,则抛出该异常。

你可以在这里查看源代码: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

关于groovy - HTTPBuilder 在 GET 方法上设置 requestBody,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9916935/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com