HTTPBuilder & Session ID
HTTPBuilder & Session ID
我有以下代码连接到 REST API 服务,进行身份验证,检索 session ID,然后进一步请求传递 session ID 进行身份验证。初始请求有效,我得到 HTTP 200 OK 加上响应中的 session ID,但是当我尝试发出第二个请求并在 header 中传递 session ID 时,我得到
捕获:groovyx.net.http.HttpResponseException:请求错误
我知道使用 classes 和 try / catch 等脚本可以写得更好。我仍在学习 java 和 groovy 所以我从只是想在同一个 class 内完成所有事情。
非常感谢任何帮助。
import groovyx.net.http.HTTPBuilder
import groovyx.net.http.URIBuilder
import static groovyx.net.http.Method.POST
import static groovyx.net.http.ContentType.*
def url = 'https://1.1.1.1/web_api/'
def uri = new URIBuilder(url)
String CHKPsid
uri.path = 'login'
def http = new HTTPBuilder(uri)
http.ignoreSSLIssues()
http.request(POST,JSON ) { req ->
headers.'Content-Type' = 'application/json'
body = [
"user":"username",
"password":"password"
]
response.success = { resp, json ->
println (json)
CHKPsid = (json.sid)
println "POST Success: ${resp.statusLine}"
}
}
uri.path = 'show-changes'
http.request(POST,JSON ) { req ->
headers.'Content-Type' = 'application/json'
headers.'X-chkp-sid' = '${CHKPsid}'
body = [
"from-date" : "2017-02-01T08:20:50",
"to-date" : "2017-10-21"
]
response.success = { resp, json ->
println (json)
println "POST Success: ${resp.statusLine}"
}
}
String interpolation 不适用于单引号(或三重单引号)。当 groovy 将计算 '${CHKPsid}'
(单引号)时,其值将为 ${CHKPsid}
(此字符串)。为了使用变量的 value,你应该使用双引号:"${CHKPsid}"
或者只是变量:headers.'X-chkp-sid' = CHKPsid
.
所以这个输出:
String CHKPsid = "abc123"
println '${CHKPsid}'
println "${CHKPsid}"
将是:
${CHKPsid}
abc123
为了快速测试服务器接收到的内容,可以使用httpbin.org or requestb.in
因此,除了正确分配 session ID 的值外,我还发现调用同一个 HTTPbuilder - http.request
第二次即使更改了 uri,header 和 body 是问题所在。侦听服务器仍然将此视为同一登录 API 调用的一部分。我的解决方法/解决方案是定义一个具有不同名称的第二个 HTTPbuilder,现在可以使用了。我很想知道这是否是正常行为以及其他人如何处理此问题。谢谢
我有以下代码连接到 REST API 服务,进行身份验证,检索 session ID,然后进一步请求传递 session ID 进行身份验证。初始请求有效,我得到 HTTP 200 OK 加上响应中的 session ID,但是当我尝试发出第二个请求并在 header 中传递 session ID 时,我得到
捕获:groovyx.net.http.HttpResponseException:请求错误
我知道使用 classes 和 try / catch 等脚本可以写得更好。我仍在学习 java 和 groovy 所以我从只是想在同一个 class 内完成所有事情。
非常感谢任何帮助。
import groovyx.net.http.HTTPBuilder
import groovyx.net.http.URIBuilder
import static groovyx.net.http.Method.POST
import static groovyx.net.http.ContentType.*
def url = 'https://1.1.1.1/web_api/'
def uri = new URIBuilder(url)
String CHKPsid
uri.path = 'login'
def http = new HTTPBuilder(uri)
http.ignoreSSLIssues()
http.request(POST,JSON ) { req ->
headers.'Content-Type' = 'application/json'
body = [
"user":"username",
"password":"password"
]
response.success = { resp, json ->
println (json)
CHKPsid = (json.sid)
println "POST Success: ${resp.statusLine}"
}
}
uri.path = 'show-changes'
http.request(POST,JSON ) { req ->
headers.'Content-Type' = 'application/json'
headers.'X-chkp-sid' = '${CHKPsid}'
body = [
"from-date" : "2017-02-01T08:20:50",
"to-date" : "2017-10-21"
]
response.success = { resp, json ->
println (json)
println "POST Success: ${resp.statusLine}"
}
}
String interpolation 不适用于单引号(或三重单引号)。当 groovy 将计算 '${CHKPsid}'
(单引号)时,其值将为 ${CHKPsid}
(此字符串)。为了使用变量的 value,你应该使用双引号:"${CHKPsid}"
或者只是变量:headers.'X-chkp-sid' = CHKPsid
.
所以这个输出:
String CHKPsid = "abc123"
println '${CHKPsid}'
println "${CHKPsid}"
将是:
${CHKPsid}
abc123
为了快速测试服务器接收到的内容,可以使用httpbin.org or requestb.in
因此,除了正确分配 session ID 的值外,我还发现调用同一个 HTTPbuilder - http.request
第二次即使更改了 uri,header 和 body 是问题所在。侦听服务器仍然将此视为同一登录 API 调用的一部分。我的解决方法/解决方案是定义一个具有不同名称的第二个 HTTPbuilder,现在可以使用了。我很想知道这是否是正常行为以及其他人如何处理此问题。谢谢