2011年6月現在、AndroidでHTTP通信でよく使われるコンポーネントは次の三種類。
WebViewコンポーネントはCookieを自動的に処理してくれる。SQLite3のデータベースに、認証情報やForm入力値などと共に保存され永続化される。
本記事では残りの java.net, HttpClient での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のTutorialドキュメント参照。
Androidに含まれているHttpClientのバージョンは 4.0.beta前後らしい。
プラットフォームの互換性維持のため、Apache側とはアップデートを同期出来ていない模様。
実際、 現在ログイン中のユーザーは、指定されたデータ(ID=981)にアクセスする権限がありません。 でも紹介しているようにApache側とインターフェイスにズレが生じている。
個人的なオススメ:
HttpClientの方がHTTPを強く意識しているので、エンコード・デコード系のメソッドも充実しているしHTTPに素直に触れるような構成になっている。API呼び出しのように自分でパラメータを組み立てたり、HTTPヘッダーを細かく操作する場合はHttpClientをお薦めしたい。
逆にHttp(s)URLConnectionをお薦め出来る場面は、静的リソースを単純にGETするだけで 4xxや5xx系をまとめてエラーとして扱って良い場合に限定させてもらう。
とはいえ、これは個人的にHttp(s)URLConnectionに対して「良い思い出」が無いせいでもある。
今現在Http(s)URLConnectionでも用が足りているのであれば、強いてHttpClientに乗り換える理由は無い。