5

Google Reader API 今天似乎期待一些不同的身份验证!

大约一周前,我下载了这个,一切正常,我尝试将它移植到 java。对于我的代码,直到今天它都可以正常工作(在您的示例的帮助下)。我堆栈跟踪所有内容,我发现突然谷歌阅读器不接受仅 SID 作为 cookie。当然,我也测试运行了您的示例应用程序,但它不能正常工作。

然后我去篡改谷歌阅读器的数据,我删除了除 SID 之外的所有 cookie 条目,但它不起作用(它给出了 401,就像我的应用程序和你的示例一样);我再次测试,发现它现在需要另一个名为 HSID 的 cookie 条目,与 SID(超过 100 个字长)相比,它大约是 10-20 个字。有谁知道我们在哪里可以获得额外的 HSID?

PS 我可以使用 HTTPS 进行身份验证,谷歌正在向我返回三个令牌(SID、LSID、AUTH)。但我无处可猜 HSID 是什么。

4

6 回答 6

10

我做到了。是的,sfa提供的链接是对的。但是格式有点太混乱了。这是我的做法。

  1. 使用登录凭据发布到https://www.google.com/accounts/ClientLogin 。
  2. 作为回报,如果登录正确,将传递三个令牌:席位 B. LSID C. 认证
  3. 将 Auth 保存在应用程序的某处。忘记 SID 和 LSID(我想他们以后可能会删除它们)
  4. 在每个请求中,在标头中添加以下内容: headername: Authorization value: GoogleLogin auth={Auth string} 例如(在 java 中)

    HttpGet 方法 = new HttpGet(CommandUrl + QueryString); method.addHeader("授权", "GoogleLogin auth=" + Auth);

这行得通。感谢 sfa 的链接。

于 2010-06-23T10:57:05.180 回答
3

您必须将 Authorization GoogleLogin auth=xxx 添加到您的标题中。这是消息中的引述:

以下是如何进行此更改的快速摘要:对于那些已经从 https://www.google.com/accounts/ClientLogin获得身份验证的应用程序, 您应该在响应中返回 Auth= 值。对于您发送给 Reader 的每个请求,您都应该将该值作为 HTTP 标头提供,并且一切都会照常工作。标头格式为:Authorization:GoogleLogin auth=[从ClientLogin获取的值]

确认它有效!我得到了同样的错误并且已经解决了这个问题。在这里看到它

于 2010-06-23T09:37:00.530 回答
1

有关详细信息,请参阅http://code.google.com/p/google-reader-api/wiki/Authentication,但简而言之,仅支持 ClientLogin 和 OAuth。请不要继续模拟浏览器流程(使用 SID 和 HSID cookie),这不受支持并且可能随时中断。

于 2010-06-23T18:52:20.027 回答
1

或者考虑使用此处提供的 ReaderTemplate 类:http: //github.com/wspringer/greader-java/。它基本上隐藏了在适当的标题和(重新)身份验证中编织的复杂性。

于 2010-08-24T11:23:19.130 回答
0

首次登录时使用 https://www.google.com/accounts/ServiceLoginAuth 。你会得到hsid!

我看到所有 google reader api 操作都使用 hsid。

我使用 firebug 可以在响应的 setCookie 字段中看到 hsid

于 2010-06-23T12:10:46.063 回答
0

xandy 描述的 4 个步骤正在工作,谢谢。

这是我在 .NET 中的 xandy 步骤的实现:http ://sandrinodimattia.net/blog/post/Consuming-Google-(Reader)-with-NET-Part-1-Authentication.aspx

于 2010-07-06T12:47:01.450 回答