1. 程式人生 > >Actionscript使用Scoket方式傳送HTTP請求實現

Actionscript使用Scoket方式傳送HTTP請求實現

FLash在安全方面的保守讓它成為了最安全和最廣泛的RIA應用開發技術,但是對程式設計師來說那可能不會那麼輕鬆了,比如最簡單的http請求,通常

會被系統攔截,所以我們需要一種再底層的方式來實現Http請求。



以下是ActionScript中最常用的Http請求的使用程式碼







package {

import flash.display.Sprite;

import flash.events.*;

import flash.net.URLLoader;

import flash.net.URLRequest;

import flash.net.URLRequestHeader;

import flash.net.URLRequestMethod;

import flash.net.URLVariables;

public class URLRequestDemo extends Sprite {

public function URLRequestDemo () {

//Url String

var url:String = "http://www.lidaren.com/";

var loader:URLLoader = new URLLoader();

//add EventListener

//Load Complete

loader.addEventListener(Event.COMPLETE, completeHandler);

var request:URLRequest = new URLRequest(url);

//Http Request Method

request.method = URLRequestMethod.POST;

try {

//Load

loader.load(request);

} catch (error:Error) {

trace("Unable to load requested document.");

}

}



private function completeHandler(event:Event):void {

var loader:URLLoader = URLLoader(event.target);

trace("Data Content: " + loader.data);

}

}



以上程式碼通過URLLoader來裝載URLRequest獲取的資料並輸出,但是

問題就是出在這裡,如果flash的安全設定不允許URLRequest,那就..



簡單講一下Flash是如何傳送Http請求的過程,flash首先檢查目標站點

的下是否存在crossdomain.xml,存在則讀取並載入到安全策略中,沒有

則使用預設的安全策略,crossdomain.xml中如允許請求,那麼允許連

接,否則攔截,這一點與其他的語言不同,所以使用時需要注意,其他的

跟一般大家最常用的socket的通訊方式一樣的,建立Scoket連線->

傳送Socket請求包-> 監聽接受資料 ->關閉socket連線。



演示程式碼如下:



package {

import flash.display.Sprite;

import flash.events.Event;

import flash.events.IOErrorEvent;

import flash.events.ProgressEvent;

import flash.net.Socket;

import flash.system.Security;



public class SocketDemo extends Sprite

{

public var port:int = 80;

public var host:String = "www.lidaren.com";

public var sock:Socket;

public var buffer:String;



public function SocketDemo()

{

sock = new Socket();

sock.addEventListener(Event.CONNECT,connectHandler);

sock.addEventListener(Event.CLOSE,closeHandler);

sock.addEventListener(ProgressEvent.SOCKET_DATA,socketDataHandler);

sock.addEventListener(Event.COMPLETE,completeHandler);

Security.loadPolicyFile("http://"+host+":"+port+"/crossdomain.xml");



sock.addEventListener(IOErrorEvent.IO_ERROR,function(e:IOErrorEvent):void{trace("ioerr");});



sock.connect(host,port);

}

//完畢

public function completeHandler(event:Event):void {

trace("completeHandler:"+event.target.data);

}

//關閉

public function closeHandler(event:Event):void {

trace("close handler");

}



public function connectHandler(event:Event):void {

trace("Connect...Ok");

//設定Http請求頭,其他協議的請求亦可

var header:String = "GET /filename.xxx HTTP/1.1 rn";

header += "Accept: */* rn"

header += "Accept-Language: zh-cn rn";

header += "User-Agent: Mozilla/4.0";

header += "Host: " + host + ":" + port + " rn";

header += "Connection: Keep-Alive rn";

header += "Cache-Control: no-cache rnrn";

//寫入請求頭

sock.writeUTFBytes(header);

//清空緩衝區,傳送請求

sock.flush();

}

//收到資料

public function socketDataHandler(event:ProgressEvent):void {

trace("socketDataHandler:"+event.bytesLoaded);

var data:String = sock.readUTFBytes(sock.bytesAvailable);

buffer += data;

trace("Data->"+buffer);

}

}





以上程式碼部分參考自Adobe 官方AS3 programming手冊。如有問題,

大家可以參考Adobe提供的準確程式碼
--------------------------------------------------------------------------------------
- 版權宣告:
- 如在本頁面內無特別說明,本文內容均為[李大仁部落格]原創,本文版權歸[李大仁部落格]所有。
- 歡迎轉載,轉載請務必在文章頁面明顯位置提供原文連結並註明出處。歡迎您在轉載本文時保留本段宣告。
- 文章標題:[AS,ActionScript]flash使用Scoket方式傳送HTTP請求實現
- 獨立部落格:
李大仁部落格

- 永久連結:http://www.lidaren.com/archives/525
--------------------------------------------------------------------------------------
以上內容由部落格自動釋出工具自動釋出,最終顯示內容和效果會與原文內容有所偏差,敬請諒解。