0

AndroidHttpClientをCookieと一緒に使用すると、200okと403の禁止された応答が混在します。何が間違っているのかわかりません。

私はAndroidHttpClientを次のように使用しています。

私はいくつかのバックグラウンドスレッドクラスを持っており、それぞれが次のことを行います。

HttpGet get...
HttpClient client = AndroidHttpClient.newInstance("Android");
HttpContext http_context = HttpSupport.getHttpContextInstance(); 
CookieStore cookie_store = HttpSupport.getCookieStoreInstance();
http_context.setAttribute(ClientContext.COOKIE_STORE, cookie_store);
client.execute(

HttpSupportは、2つの静的フィールドを持つクラスです。CookieStoreとHttpContext:

public class HttpSupport {

private static HttpContext _context;
private static CookieStore _cookieStore;

public static synchronized HttpContext getHttpContextInstance() {
    if (_context == null) {
        _context = new BasicHttpContext();
    }
    return _context;
}

public static synchronized CookieStore getCookieStoreInstance() {
    if (_cookieStore == null) {
        _cookieStore = new BasicCookieStore();
    }
    return _cookieStore;
}

}

アプリケーションにAndroidHttpClientの複数のインスタンスがあっても大丈夫ですか?クッキーを正しく保存していますか?

4

2 に答える 2

5

Android非同期HTTPクライアントの使用をお勧めします

非常に使いやすい独自の永続的なCookieストア(PersistentCookieStore)を実装しています。実際、ライブラリを非同期機能に使用したくない場合は、ライブラリが提供する永続的なCookieストアに使用するだけで済みます。ただし、ライブラリの非同期機能は非常に価値があります。

したがって、現在のクラスで使用するには、次のようなHttpSupportクラスに変更を加えるだけです。

public static synchronized CookieStore getCookieStoreInstance(Context context) {
    if (_cookieStore == null) {
        _cookieStore = new PersistentCookieStore(context);
    }
    return _cookieStore;
}

PersistentCookieStoreが機能するために必要なため、メソッドにコンテキストを追加する必要があることに注意してください。

于 2012-06-11T21:41:01.940 に答える
1

HttpClientは、私が見つけたCookieを自動的に保存します。実際には、これらすべてを非同期タスクで実行する必要があります(Android 3.0>要件に関して)。

200応答は、すべてが正しく送信され、必要なファイルが利用可能になったときです。これは問題ではありません。

403エラーは非常に明白ですが、このサーバーはファイルまたはWebページを取得するために何らかのタイプのログインを必要としますか?これはあなたが調査する必要があるものです、ログインする方法を理解する方法はグーグルクロームのようなものを使用することです、ウェブページを右クリックし、要素を調べて、そして通過するネットワークファイルを見て、ログインして、ポストリクエストを見てください。ウェブサイトがどのように機能するかをご覧ください。

非同期タスクについては、こちらをご覧ください:HTTPPOSTリクエストANDROID4(2.3で動作)?

HttpClientのインスタンスを複数持つことができると思いますが、同じCookieを使用するには、接続されているすべてのものに1つを使用する必要があります

例:

ログインするHttpClientが1つ必要です。次に、getを使用してページをリクエストし、必要な処理を実行します。


申し訳ありませんが、HttpClientではなくAndriodHttpClientを使用していたことを確認しました。AndroidHttpClientはデフォルトでCookieを保存しないため、そうです、HttpClientではなくAndroidHttpClientを使用している理由は何ですか。

于 2012-06-11T21:29:09.207 に答える