2

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

这用于创建一个 HTTP 请求,该请求使用 ClientLogin 方法向 Google Blogger 服务进行身份验证(详细信息:http ://code.google.com/apis/accounts/docs/AuthForInstalledApps.html )

最近我遇到了FileNotFoundException即使我输入正确的凭据也会得到一个问题的问题。我完全感到困惑,因为就在几天前,它使用正确的凭据运行良好,并且仅FileNotFoundException在我输入错误的凭据时才返回。

我的问题是:

  • 为什么当我发布不正确的凭据时它会返回 FileNotFoundException - 为什么它不只是返回一个字符串,Error=BadAuthentication就像您通过浏览器访问时一样?https://www.google.com/accounts/ClientLogin

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

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

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

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

我使用以下方法调用类(这是一个单例):

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

1 回答 1

3

几点注意事项:

  1. ClientLogin 是一个遗留 API,正在被其他协议 (OAuth) 取代。谷歌说

    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. 有一个关于 ClientLogin 的警告,它可能不适用于所有 Google 帐户。

  3. Google API Client Library for Java不是您自己的,而是推荐的访问 Google API 的方法。

于 2011-02-23T22:01:41.220 回答