Ruby的Net :: HTTP无法从谷歌OAuth服务器得到正确的答案

时间:2014-06-15 09:11:01

标签: ruby curl net-http

我正在编写一个小cli工具,应该检查我的日历并根据我的约会做一些事情。
我在OAuth2身份验证方面有点挣扎。我已经使用curl工具检查了范围和client_id,如下所示:

curl -d "client_id=12345...&scope=scope=https://www.googleapis.com/auth/calendar.readonly" https://accounts.google.com/o/oauth2/device/code

这样,我得到了正确的答案。

{
 "device_code" : "somestuff",
 "user_code" : "otherstuff",
 "verification_url" : "http://www.google.com/device",
 "expires_in" : 1800,
 "interval" : 5
}

但是,当我尝试在Ruby中使用Net :: HTTP时,我只获得HTTP状态200.我已经这样做了:

res = Net::HTTP.post_form(uri, {'client_id' =>'1234....apps.googleusercontent.com', 'scope' => 'https://www.googleapis.com/auth/calendar.readonly' })

如果我之后检查res变量,我得到状态302,但我想这是正确的。
有人能告诉我我做错了什么,所以我没有得到JSON回复吗?我应该尝试一些与Net :: HTTP不同的东西吗?

1 个答案:

答案 0 :(得分:0)

res是一个包含所有响应数据的变量,而不仅仅是响应文本。如果您在puts res.body电话后post_form(),则应找到您的JSON(您可以使用JSON模块进行解析)。