home ホーム search 検索 -  login ログイン  | reload edit datainfo version cmd icon diff delete  | help ヘルプ

技術/Android/HTTP通信でCookieを取り扱うには

技術/Android/HTTP通信でCookieを取り扱うには

技術 / Android / HTTP通信でCookieを取り扱うには
id: 985 所有者: msakamoto-sf    作成日: 2011-06-19 16:24:20
カテゴリ: Android 

2011年6月現在、AndroidでHTTP通信でよく使われるコンポーネントは次の三種類。

  • java.net パッケージのURLConnection系列(HttpURLConnection, HttpsURLConnection)
  • apache.http パッケージ(Apache HttpClient)
  • android.webkit.WebView コンポーネント

WebViewコンポーネントはCookieを自動的に処理してくれる。SQLite3のデータベースに、認証情報やForm入力値などと共に保存され永続化される。
本記事では残りの java.net, HttpClient でのCookieの取り扱いについて簡単にメモする。

Http(s)URLConnection 系でのCookieの取り扱い

JDKのCookie機能と同じ。CookieHandlerをベースとして、API Level 9以上であればデフォルト実装としてCookieManagerを利用出来る。

CookieHandler : JDK 1.5 以上, Android 1.0 (API Level 1) 以上
CookieManager : JDK 1.6 以上, Android 2.3 (API Level 9) 以上

CookieManagerではsecure属性もきちんと区別してくれる。
CookieHandlerについては上手くサンプルを動かせなかったため、secure属性の区別は未検証。

参考:

Apache HttpClient でのCookieの取り扱い

Apache HttpClientのTutorialドキュメント参照。

Androidに含まれているHttpClientのバージョンは 4.0.beta前後らしい。
プラットフォームの互換性維持のため、Apache側とはアップデートを同期出来ていない模様。

実際、 現在ログイン中のユーザーは、指定されたデータ(ID=981)にアクセスする権限がありません。 でも紹介しているようにApache側とインターフェイスにズレが生じている。

Http(s)URLConnection と HttpClient のどちらがオススメか?

個人的なオススメ:

  • 静的リソースの単純なGETアクセス : Http(s)URLConnection
  • それ以外のHTTP通信 : HttpClient
    • POSTメソッドを含むAPI呼び出しを頻繁に行うケース
    • CookieなどHTTPヘッダーに関連した処理を必要とするケース

HttpClientの方がHTTPを強く意識しているので、エンコード・デコード系のメソッドも充実しているしHTTPに素直に触れるような構成になっている。API呼び出しのように自分でパラメータを組み立てたり、HTTPヘッダーを細かく操作する場合はHttpClientをお薦めしたい。
逆にHttp(s)URLConnectionをお薦め出来る場面は、静的リソースを単純にGETするだけで 4xxや5xx系をまとめてエラーとして扱って良い場合に限定させてもらう。

とはいえ、これは個人的にHttp(s)URLConnectionに対して「良い思い出」が無いせいでもある。
今現在Http(s)URLConnectionでも用が足りているのであれば、強いてHttpClientに乗り換える理由は無い。



プレーンテキスト形式でダウンロード
現在のバージョン : 1
更新者: msakamoto-sf
更新日: 2011-06-19 16:25:34
md5:0dfe41e0dad93ec565097023ba495592
sha1:e29434d240b200f0005fad26b49fad6bc66db730
コメント
コメントを投稿するにはログインして下さい。