AS與.net的互動——詳解UrlRequest

一線碼農發表於2014-03-18

  在.net中我們知道有一個叫做WebHttpRequest的東西,用它我們可以實現各種網路偷窺,監控,採集和機器人,如果外加一

個模式識別,那真是吊爆了。。。

     在as中我們也可以實現同樣的功能,而且我們可以配合js來做到跨域,採集cookie等等一些使用者行為分析,也算是web開發中

的一把利器。

 

一:構建與外部程式的通訊

  

1:一般要三個步驟

<1> 使用UrlRequest建立請求物件。

<2> 使用UrlLoader載入請求物件,然後就可以發出請求了。

<3> 監聽UrlLoader物件,通過各種事件來反饋處理的結果。

 

二:構建UrlRequest

下面來看看UrlRequest中的常用屬性

1: url

這個很簡單了,請求網址,可以是絕對也可以是相對的。

2:method

寫過ajax都知道,它是用來控制窗體的提交方式是post還是get,什麼get不能大於2k,post無限制等等。

3:requestHeader

我們知道模擬提交都會在http的head中追加各種引數來欺騙伺服器端,偽裝自己是真實的人為請求。

4:data

就是請求時附帶給伺服器端的資料,用json格式,url的kv形式都可以,但必須用URLVariables進行封裝。

5:簡單的demo

 1 var url="http://localhost:25212/index.aspx";
 2 
 3 var vari:URLVariables=new  URLVariables();
 4 
 5 vari.data="{\"id\":\"2\"}";
 6 
 7 var req:URLRequest=new URLRequest(url);
 8 
 9 req.data=vari;
10 
11 req.method=URLRequestMethod.POST;

 

三:構建UrlLoader物件

<一>: 在as中,所有的UrlRequest都需要用UrlLoader來裝載才能進行與後端程式進行互動,同時提供了5個事件來監聽當前請求的狀況。

1: open事件 

    請求操作開始時執行的事件

2:progress事件

    常用監控下載進度,可以通過byteloaded和bytetotal來實時檢視“已載入的資料”和“總資料”。

3:complete事件

    成功載入資料後呼叫的事件,也是最常用的。

4:ioError事件

    就像ajax一樣,請求失敗的時候呼叫的事件。

 

<二>: 當遠端返回資料的時候,資料都會儲存在urlloader中data屬性裡,當然資料返回的時候是什麼型別,取決與我們在post

         的時候指定的URLLoaderDataFormat。

1:URLLoaderDataFormat.TEXT

     指定當前返回data值必須是text值,當然這也是預設值。

2:URLLoaderDataFormat.BINARY

     有時候我們flash需要載入web端的二進位制資料的時候,這時候就要指定BINARY屬性。

3:URLLoaderDataFormat.VARIABLES

   這個就是指定包含的資料是一個經過url編碼的資料,所以我們用VARIABLES進行解碼。

//用urlloader進行裝載
var loader:URLLoader=new URLLoader(req);

loader.addEventListener(Event.COMPLETE,onComplete);
loader.addEventListener(IOErrorEvent.IO_ERROR,onError);

//請求載入完成
function onComplete(e:Event):void{
    trace(loader.data);
}

 

大體上就這樣了,下面我們做個實驗,向伺服器傳遞json由伺服器端進行處理。

1:服務端程式碼,只是將請求引數原樣返回

1     public partial class Index : System.Web.UI.Page
2     {
3         protected void Page_Load(object sender, EventArgs e)
4         {
5             var data = Request.Form["data"];
6 
7             Response.Write("恭喜,資料請求成功~   " + data);
8         }
9     }

 

2:as程式碼

 1 import flash.net.URLLoader;
 2 import flash.net.URLRequest;
 3 import flash.events.Event;
 4 import flash.text.TextField;
 5 import flash.utils.Timer;
 6 import flash.events.TimerEvent;
 7 
 8 var url="http://localhost:25212/index.aspx";
 9 
10 var vari:URLVariables=new  URLVariables();
11 
12 vari.data="{\"id\":\"2\"}";
13 
14 var req:URLRequest=new URLRequest(url);
15 
16 req.data=vari;
17 
18 req.method=URLRequestMethod.POST;
19 
20 //用urlloader進行裝載
21 var loader:URLLoader=new URLLoader(req);
22 
23 loader.addEventListener(Event.COMPLETE,onComplete);
24 loader.addEventListener(IOErrorEvent.IO_ERROR,onError);
25 
26 //請求載入完成
27 function onComplete(e:Event):void{
28     trace(loader.data);
29 }
30 
31 //io請求錯誤
32 function onError(e:IOErrorEvent):void{
33     trace("對不起,資料請求錯誤");
34 }

 

相關文章