#navi_header|技術| 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属性の区別は未検証。 参考: - 「Java SE 6完全攻略」第40回 Cookieを扱う その1 - Java技術最前線:ITpro -- http://itpro.nikkeibp.co.jp/article/COLUMN/20070801/278817/ - 「Java SE 6完全攻略」第41回 Cookieを扱う その2 - Java技術最前線:ITpro -- http://itpro.nikkeibp.co.jp/article/COLUMN/20070801/278820/ - Java 6で、HttpURLConnectionをクッキーに対応させる手軽な方法。 - 片っ端から忘れていけばいいじゃない。 -- http://0xc000013a.blog96.fc2.com/blog-entry-91.html * Apache HttpClient でのCookieの取り扱い Apache HttpClientのTutorialドキュメント参照。 - HttpClient - HttpComponents HttpClient Overview -- http://hc.apache.org/httpcomponents-client-ga/ Androidに含まれているHttpClientのバージョンは 4.0.beta前後らしい。 プラットフォームの互換性維持のため、Apache側とはアップデートを同期出来ていない模様。 - Old Nabble - HttpComponents-Dev - HttpClient in Android -- http://old.nabble.com/HttpClient-in-Android-td27915358.html 実際、 [[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に乗り換える理由は無い。 #navi_footer|技術|