package com.xx.module.core
{
import flash.events.Event;
import flash.events.HTTPStatusEvent;
import flash.events.IEventDispatcher;
import flash.events.IOErrorEvent;
import flash.events.ProgressEvent;
import flash.events.SecurityErrorEvent;
import flash.net.URLLoader;
import flash.net.URLLoaderDataFormat;
import flash.net.URLRequest;
import flash.net.URLRequestHeader;
import flash.net.URLRequestMethod;
import flash.net.URLVariables;
import flash.utils.ByteArray;
public class GMHttp
{
public static const RESPONSE_OK:int = 1; //响应成功
public static const RESPONSE_ERR:int = 2; //响应失败
//数据回调
public var responseCallback:Function; //function(EventType, data)
//进度回调
public var progressCallback:Function; //function(loaded, total)
public var requestUrl:String; //要请求的url
public var requestData:Object; //要发送的数据
public var request:URLRequest;
public var method:String = URLRequestMethod.GET;
private var loader:URLLoader;
private var responseHeaders:Array;
private var dataFormat:String = URLLoaderDataFormat.TEXT;
public function GMHttp(url:String, data:Object = null, callback:Function = null)
{
requestUrl = url;
requestData = data;
responseCallback = callback;
if(data) method = URLRequestMethod.POST;
}
public function send(data:Object = null):void
{
if(data) requestData = data;
configureLoader();
loader.load(request);
}
public function setContentType(type:String):void
{
if(request == null) request = new URLRequest();
request.contentType = type;
}
//设置http头
public function setRequestHeader(key:String, value:String):void
{
if(method == URLRequestMethod.GET) method = URLRequestMethod.POST;
if(request == null) {
request = new URLRequest();
}
for(var i:int = 0; i < request.requestHeaders.length; ++i){
var h:URLRequestHeader = request.requestHeaders[i];
if(h.name == key){
h.value = value;
return;
}
}
var header:URLRequestHeader = new URLRequestHeader(key, value);
request.requestHeaders.push(header);
}
//获取响应头
public function getResponseHeaderForKey(key:String):String
{
var ret:String = null;
if(this.responseHeaders){
for(var i:int = 0; i < request.requestHeaders.length; ++i){
var h:URLRequestHeader = request.requestHeaders[i];
if(h.name == key){
ret = h.value;
break;
}
}
}
return ret;
}
private function configureLoader():void
{
if(request == null) request = new URLRequest();
request.url = requestUrl;
request.method = method;
if(requestData){
method = URLRequestMethod.POST;
if( requestData is String){
request.data = new URLVariables(String(requestData));
dataFormat = URLLoaderDataFormat.TEXT;
} else if(requestData is ByteArray){
request.data = requestData;
dataFormat = URLLoaderDataFormat.BINARY;
} else {
var v:URLVariables = new URLVariables();
for(var i:String in requestData){
v[i] = requestData[i];
}
request.data = v;
dataFormat = URLLoaderDataFormat.VARIABLES;
}
}
loader = new URLLoader();
loader.dataFormat = dataFormat;
configureListeners(loader);
}
private function configureListeners(dispatcher:IEventDispatcher):void {
dispatcher.addEventListener(Event.COMPLETE, completeHandler);
dispatcher.addEventListener(Event.OPEN, openHandler);
dispatcher.addEventListener(ProgressEvent.PROGRESS, progressHandler);
dispatcher.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
dispatcher.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler);
dispatcher.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
}
private function completeHandler(event:Event):void {
var loader:URLLoader = URLLoader(event.target);
trace("completeHandler: " + loader.data);
}
private function openHandler(event:Event):void {
trace("openHandler: " + event);
}
private function progressHandler(event:ProgressEvent):void {
trace("progressHandler loaded:" + event.bytesLoaded + " total: " + event.bytesTotal);
}
private function securityErrorHandler(event:SecurityErrorEvent):void {
trace("securityErrorHandler: " + event);
}
private function httpStatusHandler(event:HTTPStatusEvent):void {
if(event.hasOwnProperty("responseHeaders") && event.responseHeaders) {
this.responseHeaders = event.responseHeaders;
trace("headers ====================== " + event.responseHeaders);
}
trace("httpStatusHandler: " + event);
}
private function ioErrorHandler(event:IOErrorEvent):void {
trace("ioErrorHandler: " + event);
}
}
}