2012/04/19

HttpURLConnectionでBasic認証を使ったサイトにアクセスする

現在トラノマキアプリでデータを更新する処理を作っています。

このアプリで使うベースとなるデータファイルはネット上に置いてあり、先ずはこれらの更新日を取得する必要があります。オープンな場所のファイル更新日を取得するだけならHttpURLConnectionを使う方法がお手軽で良い感じですが、今回は対象となるサイトにBasic認証を掛けてある為(大した情報は無いのですが保身的な人に知れると面倒なので)ひと工夫必要です。

という訳で、Basic認証を使ってネット上のファイルの更新日を取得する方法を調べてみました。

以下、一部抜粋

private Date getLastModified(String filename) {

 URL url;
 Date date = null;

 try {
  Authenticator.setDefault(new Authenticator() {
   protected PasswordAuthentication getPasswordAuthentication() {
    return new PasswordAuthentication("userId", "password".toCharArray());
   }
  });

  url = new URL("http://www.hoge.com/" + filename);

  HttpURLConnection con = (HttpURLConnection) url.openConnection();

  con.setRequestMethod("HEAD");
  date = new Date(con.getLastModified());

 } catch (MalformedURLException e) {
  e.printStackTrace();
 } catch (IOException e) {
  e.printStackTrace();
 }
  return date;
}

こんな感じで良いみたいです。

上記コードでは 便宜上Authenticator.setDefault~の部分をメソッド内部に書いてますが、その必要はありません。まだ勉強中で曖昧なのですが、VMがパスワード要求を受けた時に返せるように設定しておくイメージ?


ちなみにこの方法だとID,パスは暗号化されないので、シビアな場所に使うならHTTPSと併用した方が良いとの事です。


参考URL
http://developer.android.com/intl/ja/reference/java/net/HttpURLConnection.html

0 件のコメント:

コメントを投稿