PHP経由でBASIC認証を通過する

FlashPlayerのセキュリティー制限でAuthorizationのヘッダーを作成することは禁止されている。swfからBASIC認証を通過するにはいつものごとくPHPとかでproxyするしかないのかな(オーサリング環境からはBASIC認証を通過できる)。以下のコードはswfから「url」、「id」、「pass」をPOST通信でPHPに渡し、BASIC認証を通過する。認証通過後はサーバーから受け取ったデータをechoで出力させてswfに返してやる。これでswfとBASIC認証の先にあるAPIとやり取りできるようになる。

Main.as

package
{
	import flash.display.Sprite;
	import flash.net.URLLoader;
	import flash.net.URLLoaderDataFormat;
	import flash.net.URLRequest;
	import flash.net.URLRequestMethod
	import flash.net.URLVariables;
	import flash.events.Event;
	import flash.text.TextField;

	public class Main extends Sprite
	{
		private var url:String = "http://***/basicproxy.php";
		private var id:String = "id";
		private var pass:String = "password";

		//------------------------------
		//   コンストラクタ
		//------------------------------
		public function Main()
		{
			//-----[送信するデータを格納]
			var variables:URLVariables = new URLVariables();
			variables.id = id;
			variables.pass = pass;

			//-----[リクエストの発行]
			var request:URLRequest = new URLRequest();
			request.url = url;
			request.method = URLRequestMethod.POST;
			request.data = variables;

			//-----[ローダーの設定]
			var loader:URLLoader = new URLLoader();
			loader.dataFormat = URLLoaderDataFormat.TEXT;
			loader.addEventListener(Event.COMPLETE, onComplete);
			loader.load(request);
		}

		//------------------------------
		//   読み込み完了
		//------------------------------
		private function onComplete(e:Event):void
		{
			var loader:URLLoader = e.target as URLLoader;
			loader.removeEventListener(Event.COMPLETE, onComplete);

			trace(loader.data);
		}
	}
}

basicproxy.php

<?php
$url = $_POST["url"];
$id = $_POST["id"];
$pass  = $_POST["pass"];

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERPWD, "$id:$pass");
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
$data= curl_exec($ch);
curl_close($ch);

echo $data;
?>

curlを使うと簡単に認証を通過できる。あとは受け取ったデータを出力するだけ。

2008.05.15 by _simo
Categories: as3, php | Tags: | Leave a comment

Leave a Reply

Required fields are marked *

*