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を使うと簡単に認証を通過できる。あとは受け取ったデータを出力するだけ。
