Android ClientLogin身份验证 - HTTPURLConnect

时间:2011-02-23 21:42:54

标签: android http http-post http-status-code-302

我在Android中实现了一个HTTPOperations类,可以成功生成HTTP POST请求。此类扩展了AsyncTask,以便它可以在后台运行。

这用于创建使用ClientLogin方法对Google Blogger服务进行身份验证的HTTP请求(详见此处:http://code.google.com/apis/accounts/docs/AuthForInstalledApps.html

最近,即使我输入了正确的凭据,我也遇到了FileNotFoundException的问题。我很困惑,就在几天前它使用正确的凭据工作正常,只有在我输入错误的凭据时才返回FileNotFoundException

我的问题是:

  • 为什么在POST不正确的凭据时返回FileNotFoundException - 为什么它不会像通过浏览器访问时那样返回一个声明Error=BadAuthentication的字符串? https://www.google.com/accounts/ClientLogin

  • 为什么即使使用正确的凭据我也会遇到问题?值得注意的是我的HTTP POST是正确的,我知道,因为如果我POST到HTTP版本的CLientLogin而不是HTTPS版本,我会得到HTTP 302 Moved Temporarily错误页面。

我的HTTPOperations类是使用Java中的 HttpURLConnection 类构建的,然后我相应地设置了此HttpURLConnection的头和方法,并打开DataOutputStream来编写我的POST请求,然后我打开一个InputStream来检索响应。如果凭据不正确(现在如果它们是正确的话),则会捕获异常。

我必须强调使用不同的身份验证方法并不是一个有用的解决方案,遗憾的是我必须继续使用此 ClientLogin 。由于通过HTTPS进行调用,因此在Wireshark等软件包中跟踪也非常困难。

如果您想要任何代码等,请告诉我。

我使用以下方法调用了类( singleton ):

AsyncTask<String,Void,String> requestResult = httpOp.execute("post","https://www.google.com/accounts/ClientLogin",postData,"true","");

1 个答案:

答案 0 :(得分:3)

一些注意事项:

  1. ClientLogin是一种传统API,正在被其他协议(OAuth)取代。 Google says

    AuthSub and ClientLogin are Google's proprietary authorization APIs, available
    as an alternative to OAuth for most Google APIs. If possible, you should avoid
    using these services
    
  2. warning about ClientLogin可能无法与所有Google帐户配合使用。

  3. 有一种Google API Client Library for Java,而不是自己滚动,这是一种推荐的访问Google API的方式。

相关问题