gpt4 book ai didi

groovy - 为多个请求重用 Groovy HTTPBuilder 对象是否安全?

转载 作者:行者123 更新时间:2023-12-01 13:53:04 26 4
gpt4 key购买 nike

我有一些 HTTPBuilder 代码的行为会有所不同,具体取决于我是否重用相同的 HTTPBuilder 对象来对同一个 REST 服务执行两个不同的请求:

def http = new HTTPBuilder( 'https://myBaseURI/' )
http.auth.basic username, password.getPlainText()
http.ignoreSSLIssues()

http.request(GET,JSON) { req ->
uri.path = 'some/api/path/'
headers.'User-Agent' = 'Mozilla/5.0'
} // this request always behaves as expected

http.request(POST, JSON) { req ->
uri.path = 'some/other/api/path'
headers.'User-Agent' = 'Mozilla/5.0'
body = {
// Request body elided for brevity
}
}

“正确”行为是 POST 返回 201 - Created,但响应返回 200 OK,除非我创建一个新的 HTTPBuilder 来处理发出第二个请求,在这种情况下,API 调用按预期运行。

当然,不同结果的原因可能在其他地方,但我首先想确保我没有滥用这个对象。重用 HTTPBuilder 发出多个 HTTP 请求时是否有需要注意的问题?

最佳答案

当您在 GET 请求中设置 uri.path 时,尝试删除最后的正斜杠。

查看 setPath in URIBuilder 的文档你得到:

//Set the path component of this URI. The value may be absolute or relative to the current path. e.g.
def uri = new URIBuilder( 'http://localhost/p1/p2?a=1' )

uri.path = '/p3/p2'
assert uri.toString() == 'http://localhost/p3/p2?a=1'

uri.path = 'p2a'
assert uri.toString() == 'http://localhost/p3/p2a?a=1'

uri.path = '../p4'
assert uri.toString() == 'http://localhost/p4?a=1&b=2&c=3#frag'

我理解这意味着,如果您在末尾设置了一个带有斜杠的 httpbuilder 对象的 uri.path,您实际上已经更新了工作路径,因此对 uri.path 的任何后续相对路径更新都将导致路径的串联。因此,您在该示例中的 POST 最终指向 https://myBaseURI/some/api/path/some/other/api/path

关于groovy - 为多个请求重用 Groovy HTTPBuilder 对象是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27492971/

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