Adobe AIRのBasic認証について

Adobe AIRBasic認証でちょっと躓いたので記録する.

認証は前から使っていたんだけど,ライブラリ化していたのですっかり書き方を忘れて居たのが原因...ということで,今回はtwitterの認証に関して書きまする.

ということでいきなりプログラム.

//ユーザ認証部分

public function hoge():void{
	URLRequestDefaults.setLoginCredentialsForHost("twitter.com", user_id, user_pass);
	var dummy:URLRequest = new URLRequest("http://twitter.com/statuses/update.xml");
	dummy.method = "POST";
	//メールアドレスとパスワードをURLエンコードしてリクエストに付加
	var variables : URLVariables = new URLVariables();
	variables.status = "";
	dummy.data = variables;
	var dummyLoader:URLLoader = new URLLoader();
	dummyLoader.addEventListener(HTTPStatusEvent.HTTP_RESPONSE_STATUS, onResponsed);
	dummyLoader.load(dummy);	
} 

private function onResponsed(ev:Event):void{
	var loader:URLLoader = ev.target as URLLoader;
	loader.removeEventListener(HTTPStatusEvent.HTTP_RESPONSE_STATUS, onResponsed);
}

こんな感じですね.何度も認証が必要な操作を行うプログラムの場合

URLRequestDefaults.setLoginCredentialsForHost(host_name:String, user_name:String, password:String); 

を使うと便利です.これは一度認証が通ったらその認証をそのホストとのやりとりの際のデフォルト認証として登録してくれるものです.なので一回この処理を書けば良いということになります.

しかし,ひとつ注意しなければならいのが,"twitter.com"のようなログインAPIを持たないサイトの認証を行う場合,こちらから認証が必要な任意の"POST"リクエストをする必要があります.

	var dummy:URLRequest = new URLRequest("http://twitter.com/statuses/update.xml");
	dummy.method = "POST";
	//メールアドレスとパスワードをURLエンコードしてリクエストに付加
	var variables : URLVariables = new URLVariables();
	variables.status = "";
	dummy.data = variables;
	var dummyLoader:URLLoader = new URLLoader();
	dummyLoader.addEventListener(HTTPStatusEvent.HTTP_RESPONSE_STATUS, onResponsed);
	dummyLoader.load(dummy);	

ここの部分です.今回のtwitter.comでは,variablesは特に必要無いのでURLVariablesを空で作成しておき,それをdummy:URLRequestに渡してあります.で,無事正しいレスポンスが返ってきたら,その後からは全て認証付きのリクエストになります.

いくつかのブログで,URLRequestDefaults.setLoginCredentialsForHostだけすれば良い的なニュアンスで書いているところが在るので,この部分を忘れないように!