HTTPBuilder和formUrlEncoded

时间:2016-02-10 16:51:43

标签: groovy

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

我尝试使用HTTPBuilder(https://github.com/jgritman/httpbuilder)向Google发出请求

https://developers.google.com/identity/protocols/OAuth2ForDevices#obtainingacode

这是我的代码

/* comment here */

当我运行此代码时,我得到了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显示200 Ok,但我得到resp.statusLine null

我不明白为什么会发生这种情况......

与curl相同的请求向我发送了正确的回复

println reader.text

修改

这是ouput

  • HTTP / 1.1 200确定
  • [{" device_code" :" XXXk"," user_code" :" XXX"," verification_url" :" https://www.google.com/device"," expires_in" :1800,"间隔" :5}:null]

编辑2

我可以使用以下代码访问响应(我不确定它是干净的代码)

{
  "device_code" : "XXXXX",
  "user_code" : "XXXX",
  "verification_url" : "https://www.google.com/device",
  "expires_in" : 1800,
  "interval" : 5
}

1 个答案:

答案 0 :(得分:0)

据我所知reader已经解析了Map - 你没有获得流的实例,而是已经解析的响应。由于没有text密钥,因此您将获得null。尝试:

println reader.device_code

它应该运作良好。

您还可以查看reader的内容:

println reader.getClass()