夕べ書いた URLLoader + URLRequest で Web サーバからファイルを取得する AIR アプリに、BASIC 認証処理を追加してみた。
実際の運用では、BASIC 認証を行うことになるからな、多分。
(1) Base64Encoder クラスが定義されている mx.utils.* パッケージを import
import mx.utils.*;
(2) Base64Encoder クラスを使って認証情報(ユーザID,パスワード)を Base64 encode
(3) http request header に Authorization ヘッダラインを追加((2)で encode したデータをセット)
という手順。具体的には、
<mx:Script>
<![CDATA[import mx.utils.*;
<略>private function getHttp():void {
var user:String = "user1"; // ログインID
var password:String = "passwd1"; // パスワード
var encoder:Base64Encoder = new Base64Encoder();
encoder.encode(user + ":" + password); // Base64 encodevar req:URLRequest = new URLRequest();
req.url = "http://www.exsample.com/test/hoge.jpg";
req.requestHeaders = [new URLRequestHeader("Authorization", "Basic " + encoder.toString())]; // Authorization ヘッダラインを追加
req.userAgent = "Test Bot 1.0";var loader:URLLoader = new URLLoader();
loader.addEventListener(Event.COMPLETE,loadComp);
loader.dataFormat = URLLoaderDataFormat.BINARY;
loader.load(req);}
<略>
]]>
</mx:Script>
ちゅう感じじゃね。
requestHeaders プロパティは配列なので、
var authorization:URLRequestHeader = new URLRequestHeader("Authorization", "Basic " + encoder.toString());
req.requestHeaders.push(authorization);
という具合に push してやってもいいけど。うむ。push した方がコード的にはきれいかな。(好みの問題だが:-P)
これで BASIC 認証した先にあるデータもバッチリ落としてくることが出来るようになった。
まあ、今回の案件、別に生データを持って行かれても困るようなものではないので、わざわざ BASIC 認証をかける必要も無いのだが、そこは、それ。最近は、「セキュリティのことはちゃんと考えてますよ!」というポーズも必要だからなあ。(^^;
システム屋として「そこは別に必要ないでしょ?」と思うことでもな。(^^;