2008.05.15
category
comments

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

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

Main.as

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

Post a comment




Comment

Trackbacks

この記事のコメント・トラックバックRSS