LoginSignup
1
0

More than 3 years have passed since last update.

[Android] fuel (HttpURLConnection)の cookie を初期化する方法

Posted at

概要

Android(Kotlin) の HTTP ネットワークライブラリである fuel を使って API リクエストする際、 cookie を初期化してリクエストする方法です。
(タイトルに HttpURLConnection とあるのは fuel 内でリクエストする際 HttpURLConnection を使っているため)

  • なぜ初期化したいのか
    • 複数のアカウントでログインできる機能を実装していた
    • 1つ目のアカウントでログインするとログインしたアカウントの cookie が保持されてしまい、2つ目のアカウントでログインしようとすると既に「ログイン済み」という扱いをされていた
    • 2つ目のアカウントでログインするときには「未ログイン」状態にする必要があった

方法

CookieHandler.setDefault(CookieManager())

こちらのコードで cookie が初期化されるので、リクエストする前に実行させればよいです。

なぜこの方法で初期化できるのか

わかってしまえばなんてことはないのですが、この答えにたどり着くまでに調べたことをつらつらと。

 *                  use
 * CookieHandler <------- HttpURLConnection
 *       ^
 *       | impl
 *       |         use
 * CookieManager -------> CookiePolicy
 *             |   use
 *             |--------> HttpCookie
 *             |              ^
 *             |              | use
 *             |   use        |
 *             |--------> CookieStore
 *                            ^
 *                            | impl
 *                            |
 *                  Internal in-memory implementation
  • いちおう fuel の Request から HttpURLConnection を出力して CookieHandler を確認

    • はじめてリクエストするとき スクリーンショット 2020-05-28 19.03.21.png
    • 2回目にリクエストするとき スクリーンショット 2020-05-28 19.23.25.png
  • よって以下のコードでリクエストする前に java.net.CookieHandler を初期化すればよい

CookieHandler.setDefault(CookieManager())

注意

  • Cookie を引き継いだ状態で API リクエストしたい場合は、初期化する前に今の状態をどこかに(Preferencesあたりかな)へ退避させたりする必要があります。
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0