2

私はAndroidにHTTPPOSTリクエストを正常に生成できるHTTPOperationsクラスを実装しました。このクラスは、バックグラウンドで実行できるようにAsyncTaskを拡張します。

これは、ClientLoginメソッドを使用してGoogle Bloggerサービスで認証するHTTPリクエストを作成するために使用されます(詳細はhttp://code.google.com/apis/accounts/docs/AuthForInstalledApps.html) 。

最近FileNotFoundException、正しいクレデンシャルを入力しても取得できる問題が発生しました。ほんの数日前は正しいクレデンシャルで正常に動作FileNotFoundExceptionし、間違ったクレデンシャルを入力した場合にのみを返すため、私は完全に困惑しています。

私の質問は次のようになります:

  • Error=BadAuthentication間違ったクレデンシャルをPOSTしたときにFileNotFoundExceptionが返されるのはなぜですか?ブラウザ経由でアクセスしたときのように文字列を返すだけではないのはなぜですか?https://www.google.com/accounts/ClientLogin

  • 正しいクレデンシャルを使用しても問題が発生するのはなぜですか?HTTP POSTが正しいことは注目に値するかもしれません。HTTPSバージョンではなくHTTPバージョンのCLientLoginにPOSTすると、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. 独自のライブラリを作成する代わりに、Java用のGoogle APIクライアントライブラリがあります。これは、GoogleAPIにアクセスするための推奨される方法です。

于 2011-02-23T22:01:41.220 に答える