GMHttp

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);
        }

    }
}

 

posted @ 2014-03-25 15:03  ference  阅读(287)  评论(0编辑  收藏  举报