Groovy HTTPBuilder和formUrlEncoded

Groovy HTTPBuilder和formUrlEncoded,groovy,Groovy,首先,对不起,我是groovy的新手 我正试图用HTTPBuilder向谷歌提出请求() 这是我的密码 def code = new HTTPBuilder(oauthUrl).request(POST, URLENC) { req -> body = [client_id: clientId, scope: 'https://docs.google.com/feeds'] headers.'Accept' = 'application/json' header

首先,对不起,我是groovy的新手

我正试图用HTTPBuilder向谷歌提出请求()

这是我的密码

def code = new HTTPBuilder(oauthUrl).request(POST, URLENC) { req ->
    body = [client_id: clientId, scope: 'https://docs.google.com/feeds']

    headers.'Accept' = 'application/json'
    headers.'Content-Type' = 'application/x-www-form-urlencoded'
    response.success = { resp, reader ->
        println resp.statusLine
        println reader
        println reader.text
    }
    response.failure = { resp, reader ->
        println resp.statusLine
        println reader.text
    }
}
当我运行此代码时,我得到
println reader
的输出,而且
resp.statusLine
显示200 Ok,但我得到
println reader.text的
null

我不明白为什么会这样

与curl相同的请求会给我正确的响应

{
  "device_code" : "XXXXX",
  "user_code" : "XXXX",
  "verification_url" : "https://www.google.com/device",
  "expires_in" : 1800,
  "interval" : 5
}
编辑 这是输出

  • HTTP/1.1200ok
  • [{“设备代码”:“XXXk”,“用户代码”:“XXX”,“验证url”:“,”过期时间:1800,“间隔:5}:null]
  • 空的
编辑2 我可以使用以下代码访问响应(我不确定它是否是干净的代码)


据我所知,
reader
是一个已经解析的
Map
——您不会得到stream的实例,而是已经解析的响应。由于没有
文本
键,因此将得到null。尝试:

println reader.device_code
它应该很有效

您还可以使用以下工具检查什么是
读卡器

println reader.getClass()

我假设
println reader
打印出该响应的映射?我添加了一个编辑来显示输出
println reader.device\u code
打印
null
println reader.getClass()
打印
java.util.HashMap
。好的,这就是我说的:
reader
map
,并且它没有
文本
设备代码
键。您可以将
reader
作为普通的groovy
Map
println reader.getClass()