2013年1月20日日曜日

[Scala] Soure.fromUrl での認証

認証が必要なページへアクセスする際の認証の方法。
Apache HttpClient 等を使うのであればその流儀でやればいいのだが、scala.io.Source.fromUrl 等で簡単に済ませる場合のやりかた。

Java の java.net.URL で使う方法をそのまま使う。

  private def setauth() {
   import java.net.{Authenticator,  PasswordAuthentication}
   val userid = "xxxxxx";
   val passwd = "xxxxxx";
    Authenticator.setDefault(
      new Authenticator {
        override def getPasswordAuthentication = 
          new PasswordAuthentication( userid,  passwd.toCharArray)
      }
    )
  }

java.net.Authenticator の getPasswordAuthentication をoverride したクラスを Authenticator#setDefault でセットしておくと、Source.fromUrl を実行時に パスワード認証が必要になったら自動的に呼び出される。
setAuth() を一回実行したら、後は

    val url = "https://xxxxxx....";
    val content = Source.fromURL(url, "utf-8").getLines.toList;

で普通に呼び出せばいい。

参考:
この方法は、最初に認証なしで実行してパスワード認証を要求された場合にフレームワークが再度認証ヘッダをつけて送り返す。認証なしで実行した場合にサーバーが 404 を返したり、認証方式を返さない(チャレンジをサポートしていない)場合には使えない。最初から認証情報をつけて送る必要がある場合には自力でなんとかするか、 Apache HttpClient 等を使う必要がある。

0 件のコメント:

コメントを投稿