Пример #1
0
        public object DataToObject(byte[] Data)
        {
            var mem = new MemoryStream(Data);

            // 解压缩
            using (var stream = new GZipStream(mem, CompressionMode.Decompress))
            {
                using (var resultStream = new MemoryStream())
                {
                    var buffer = new byte[10240];
                    int c      = 0;
                    while ((c = stream.Read(buffer, 0, 10240)) != 0)
                    {
                        resultStream.Write(buffer, 0, c);
                    }
                    buffer = resultStream.ToArray();
                    return(baseHandler.DataToObject(buffer));
                }
            }
        }
Пример #2
0
        /// <summary>
        /// 启动异步请求
        /// </summary>
        /// <param name="Method"></param>
        /// <param name="Data"></param>
        /// <returns></returns>
        public async Task <Object> SendRequestAsync(RequestMethod?Method = null, object Data = null)
        {
            int retry_count = 1;

            do
            {
                try
                {
                    Method = Method ?? ReqMethod;
                    Data   = Data ?? ReqObject;

                    byte[] Body = null;
                    if (Data != null)
                    {
                        Body = Processor.ObjectToData(Data);
                    }
                    BaseRequest.Method            = Enum.GetName(typeof(RequestMethod), Method);
                    BaseRequest.AllowAutoRedirect = AllowRedirect;
                    BaseRequest.Expect            = null;
                    if (BaseRequest.CookieContainer == null)
                    {
                        // 初始化Cookies容器以获取返回的Cookie
                        BaseRequest.CookieContainer = new CookieContainer();
                    }
                    BaseRequest.ServicePoint.Expect100Continue = false;
                    BaseRequest.CachePolicy = new System.Net.Cache.HttpRequestCachePolicy(System.Net.Cache.HttpRequestCacheLevel.NoCacheNoStore);
                    if (Body != null)
                    {
                        using (Stream RequestStream = BaseRequest.GetRequestStream())
                        {
                            await RequestStream.WriteAsync(Body, 0, Body.Length);
                        }
                    }
                    HttpWebResponse Response = (HttpWebResponse)BaseRequest.GetResponse();
                    LastResponse    = Response;
                    ResponseCookie  = Response.Cookies;
                    ResponseHeaders = new NameValueCollection();
                    for (int i = 0; i < Response.Headers.Count; i++)
                    {
                        ResponseHeaders.Add(Response.Headers.Keys[i], Response.Headers[i]);
                    }
                    using (var ResponseStream = Response.GetResponseStream())
                    {
                        using (var Buffer = new MemoryStream())
                        {
                            int    ReadLen = 0;
                            byte[] Part    = new byte[4096];
                            while (true)
                            {
                                ReadLen = await ResponseStream.ReadAsync(Part, 0, 4096);

                                if (ReadLen == 0)
                                {
                                    break;
                                }
                                await Buffer.WriteAsync(Part, 0, ReadLen);
                            }

                            byte[] ResponseData = Buffer.ToArray();

                            ResponseObject = Processor.DataToObject(ResponseData);
                            LastError      = null;
                            RequestFinished?.Invoke(this);
                            return(ResponseObject);
                        }
                    }
                }
                catch (Exception ex)
                {
                    LastError       = "网络错误";
                    ResponseHeaders = null;
                    ResponseObject  = null;
                    await Task <Object> .Delay(500);
                }
            } while (retry_count++ <= Retry);

            return(null);
        }
Пример #3
0
        /// <summary>
        /// 发送请求
        /// </summary>
        /// <param name="Method"></param>
        /// <param name="Data"></param>
        /// <returns></returns>
        public object SendRequest(RequestMethod Method, object Data)
        {
            int retry_count = 1;

            do
            {
                try
                {
                    byte[] Body = null;
                    if (Data != null)
                    {
                        Body = Processor.ObjectToData(Data);
                    }
                    BaseRequest.Method            = Method.ToString();
                    BaseRequest.AllowAutoRedirect = AllowRedirect;
                    BaseRequest.Expect            = null;
                    if (BaseRequest.CookieContainer == null)
                    {
                        // 初始化Cookies容器以获取返回的Cookie
                        BaseRequest.CookieContainer = new CookieContainer();
                    }
                    BaseRequest.ServicePoint.Expect100Continue = false;
                    BaseRequest.CachePolicy = new System.Net.Cache.HttpRequestCachePolicy(System.Net.Cache.HttpRequestCacheLevel.NoCacheNoStore);
                    if (Body != null)
                    {
                        Stream RequestStream = BaseRequest.GetRequestStream();
                        RequestStream.Write(Body, 0, Body.Length);
                        RequestStream.Close();
                    }
                    HttpWebResponse Response = (HttpWebResponse)BaseRequest.GetResponse();
                    LastResponse    = Response;
                    ResponseCookie  = Response.Cookies;
                    ResponseHeaders = new NameValueCollection();
                    for (int i = 0; i < Response.Headers.Count; i++)
                    {
                        ResponseHeaders.Add(Response.Headers.Keys[i], Response.Headers[i]);
                    }
                    Stream       ResponseStream = Response.GetResponseStream();
                    MemoryStream Buffer         = new MemoryStream();
                    int          ReadLen        = 0;
                    byte[]       Part           = new byte[409600];
                    while (true)
                    {
                        ReadLen = ResponseStream.Read(Part, 0, 409600);
                        if (ReadLen == 0)
                        {
                            break;
                        }
                        Buffer.Write(Part, 0, ReadLen);
                    }
                    ResponseStream.Close();
                    ResponseStream.Dispose();
                    byte[] ResponseData = Buffer.ToArray();

                    Buffer.Close();
                    Buffer.Dispose();
                    ResponseObject = Processor.DataToObject(ResponseData);
                    LastError      = null;
                    if (RequestFinished != null)
                    {
                        RequestFinished(this);
                    }
                    return(ResponseObject);
                }
                catch (Exception ex)
                {
                    LastError       = "网络错误";
                    ResponseHeaders = null;
                    ResponseObject  = null;
                    Thread.Sleep(500);
                }
            } while (retry_count++ <= Retry);

            return(null);
        }