HTTPBuilder&会话ID

时间:2017-09-30 01:50:02

标签: groovy httpbuilder

我有以下代码连接到REST API服务,进行身份验证,检索会话ID,然后进一步请求传递会话ID进行身份验证。初始请求有效,我在响应中得到一个HTTP 200 OK加上会话ID,但是当我尝试在标题中传递第二个请求传递会话ID时,我得到了

抓到:groovyx.net.http.HttpResponseException:错误请求

我知道使用类和try / catch等可以更好地编写脚本。我仍在学习java和groovy所以我开始只是尝试在同一个类中做所有事情。

任何帮助都非常感激。

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}"
  }
}

2 个答案:

答案 0 :(得分:1)

String interpolation不适用于单引号(或三引号)。当groovy评估'${CHKPsid}'(单引号)时,其值将为${CHKPsid}(此字符串)。要使用变量的,您应该使用双引号:"${CHKPsid}"或仅使用变量:headers.'X-chkp-sid' = CHKPsid

所以输出:

String CHKPsid = "abc123"
println '${CHKPsid}'
println "${CHKPsid}"

将是:

${CHKPsid}
abc123

为了快速测试服务器收到的内容,您可以使用httpbin.orgrequestb.in

答案 1 :(得分:0)

因此,除了正确分配会话ID的值之外,我发现第二次调用相同的HTTPbuilder - http.request即使更改了uri,header和body也是问题所在。侦听服务器仍将此视为同一登录API调用的一部分。我的解决方法/解决方案是定义具有不同名称的第二个HTTPbuilder,现在可以使用了。我很想知道这是否是正常的行为,以及其他人是如何做到的。感谢。