我已经在 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","");