示例#1
0
        internal static async Task <HttpResponse> GetResponseAsync <T>(Entity.SimpleWebRequest <T> _request, CookieContainer cookie)
            where T : Entity.SimpleWebResponse
        {
            HttpResponse    httpResponse = null;
            HttpWebResponse response     = null;

            var request = CreateRequest(_request, ref cookie);

            try
            {
                if (_request.HttpMethod == Enum.HttpMethods.POST)
                {
                    if (_request.QueryBytes == null || _request.QueryBytes.Length == 0)
                    {
                        if (!string.IsNullOrWhiteSpace(_request.QueryString))
                        {
                            WriteRequestParas(request, _request.QueryString);
                        }
                    }
                    else
                    {
                        WriteRequestParas(request, _request.QueryBytes);
                    }
                }

                response = await request.GetResponseAsync() as HttpWebResponse;
            }
            catch (WebException ex)
            {
                response = ex.Response as HttpWebResponse;
            }

            httpResponse = new HttpResponse(response);
            var encoding = response.Headers["Content-Encoding"];

            using (Stream s = response.GetResponseStream())
            {
                if (!string.IsNullOrEmpty(encoding))
                {
                    if (encoding.ToLower().Contains("gzip"))
                    {
                        GZipStream st = new GZipStream(s, CompressionMode.Decompress);
                        httpResponse.ResponseBytes = ReadStreamBytes(st);
                    }
                    else if (encoding.ToLower().Contains("deflate"))
                    {
                        DeflateStream st = new DeflateStream(s, CompressionMode.Decompress);
                        httpResponse.ResponseBytes = ReadStreamBytes(st);
                    }
                }
                else
                {
                    httpResponse.ResponseBytes = ReadStreamBytes(s);
                }
            }

            response.Dispose();

            return(httpResponse);
        }
示例#2
0
        internal static async Task <byte[]> GetRequestBytesAsync <T>(Entity.SimpleWebRequest <T> _request, CookieContainer cookie)
            where T : Entity.SimpleWebResponse
        {
            var request = CreateRequest(_request, ref cookie);

            if (_request.HttpMethod == Enum.HttpMethods.POST)
            {
                if (_request.QueryBytes == null || _request.QueryBytes.Length == 0)
                {
                    if (!string.IsNullOrWhiteSpace(_request.QueryString))
                    {
                        WriteRequestParas(request, _request.QueryString);
                    }
                    else
                    {
                        request.ContentLength = 0;
                    }
                }
                else
                {
                    WriteRequestParas(request, _request.QueryBytes);
                }
            }

            return(await GetResponseBytesAsync(request));
        }
示例#3
0
        internal static async Task <HttpResponse> DownloadFileAsync <T>(Entity.SimpleWebRequest <T> _request, CookieContainer cookie, string fileSaveFullPath)
            where T : Entity.SimpleWebResponse
        {
            HttpResponse    httpResponse = null;
            HttpWebResponse response     = null;

            var request = CreateRequest(_request, ref cookie);

            try
            {
                if (_request.HttpMethod == Enum.HttpMethods.POST)
                {
                    if (_request.QueryBytes == null || _request.QueryBytes.Length == 0)
                    {
                        if (!string.IsNullOrWhiteSpace(_request.QueryString))
                        {
                            WriteRequestParas(request, _request.QueryString);
                        }
                    }
                    else
                    {
                        WriteRequestParas(request, _request.QueryBytes);
                    }
                }
                response = await request.GetResponseAsync() as HttpWebResponse;
            }
            catch (WebException ex)
            {
                response = ex.Response as HttpWebResponse;
            }

            httpResponse = new HttpResponse(response);

            // Open the report file.
            FileInfo zipFileInfo = new FileInfo(fileSaveFullPath);

            if (!zipFileInfo.Directory.Exists)
            {
                zipFileInfo.Directory.Create();
            }

            using (Stream httpStream = response.GetResponseStream())
            {
                using (FileStream fileStream = new FileStream(zipFileInfo.FullName, FileMode.Create))
                {
                    using (BinaryWriter binaryWriter = new BinaryWriter(fileStream))
                    {
                        using (BinaryReader binaryReader = new BinaryReader(httpStream))
                        {
                            // Read the report and save it to the file.
                            int  bufferSize   = 10240;
                            long writtenBytes = 0L;
                            while (true)
                            {
                                // Read report data from API.
                                byte[] buffer = binaryReader.ReadBytes(bufferSize);

                                // Write report data to file.
                                binaryWriter.Write(buffer);

                                writtenBytes += buffer.Length;

                                // If the end of the report is reached, break out of the
                                // loop.
                                if (buffer.Length != bufferSize)
                                {
                                    break;
                                }
                            }
                        }
                    }
                }
            }

            response.Dispose();

            httpResponse.ResponseBytes = UTF8Encoding.UTF8.GetBytes(zipFileInfo.FullName);
            return(httpResponse);
        }
示例#4
0
        private static HttpWebRequest CreateRequest <T>(Entity.SimpleWebRequest <T> _request, ref CookieContainer cookie)
            where T : Entity.SimpleWebResponse
        {
            var api = _request.ApiUrl;

            if (_request.HttpMethod == Enum.HttpMethods.GET && !string.IsNullOrWhiteSpace(_request.QueryString))
            {
                var uri = new Uri(api);
                if (!string.IsNullOrWhiteSpace(uri.Query))
                {
                    api = api + ("&" + _request.QueryString);
                }
                else
                {
                    api = api + "?" + _request.QueryString;
                }
            }

            var request = WebRequest.Create(api) as HttpWebRequest;

            if (_request.Headers != null)
            {
                foreach (var k in _request.Headers)
                {
                    request.Headers[k.Key] = k.Value;
                }
            }

            if (!string.IsNullOrWhiteSpace(_request.Accept))
            {
                request.Accept = _request.Accept;
            }
            if (!string.IsNullOrWhiteSpace(_request.UserAgent))
            {
                request.Headers["User-Agent"] = _request.UserAgent;
            }
            request.CookieContainer = cookie;

            if (_request.HttpMethod == Enum.HttpMethods.GET)
            {
                request.Method = "GET";
            }
            else if (_request.HttpMethod == Enum.HttpMethods.POST)
            {
                request.Method = "POST";
            }
            else if (_request.HttpMethod == Enum.HttpMethods.PUT)
            {
                request.Method = "PUT";
            }
            else if (_request.HttpMethod == Enum.HttpMethods.DELETE)
            {
                request.Method = "DELETE";
            }

            if (!string.IsNullOrWhiteSpace(_request.ContentTypeHeader))
            {
                request.ContentType = _request.ContentTypeHeader;
            }

            return(request);
        }
        private static HttpWebRequest CreateRequest <T>(Entity.SimpleWebRequest <T> _request, ref CookieContainer cookie)
            where T : Entity.SimpleWebResponse
        {
            var api = _request.ApiUrl;

            if (_request.HttpMethod == Enum.HttpMethods.GET && !string.IsNullOrWhiteSpace(_request.QueryString))
            {
                var uri = new Uri(api);
                if (!string.IsNullOrWhiteSpace(uri.Query))
                {
                    api = api + ("&" + _request.QueryString);
                }
                else
                {
                    api = api + "?" + _request.QueryString;
                }
            }

            var request = WebRequest.Create(api) as HttpWebRequest;

            request.Accept            = _request.Accept;
            request.UserAgent         = _request.UserAgent;
            request.CookieContainer   = cookie;
            request.AllowAutoRedirect = _request.AllowAutoRedirect;

            if (_request.HttpMethod == Enum.HttpMethods.GET)
            {
                request.Method = "GET";
            }
            else if (_request.HttpMethod == Enum.HttpMethods.POST)
            {
                request.Method = "POST";
            }
            else if (_request.HttpMethod == Enum.HttpMethods.PUT)
            {
                request.Method = "PUT";
            }
            else if (_request.HttpMethod == Enum.HttpMethods.DELETE)
            {
                request.Method = "DELETE";
            }

            if (!string.IsNullOrWhiteSpace(_request.ContentTypeHeader))
            {
                request.ContentType = _request.ContentTypeHeader;
            }

            if (_request.KeepAlive)
            {
                request.KeepAlive = true;
            }

            if (!string.IsNullOrWhiteSpace(_request.Referer))
            {
                request.Referer = _request.Referer;
            }

            if (_request.Headers != null)
            {
                foreach (var key in _request.Headers.Keys)
                {
                    request.Headers.Add(key, _request.Headers[key]);
                }
            }

            return(request);
        }