csharp/944095635/DMSkin-for-WPF/DMSkin.Core/Common/HTTP.cs

HTTP.cs
using System;
using System.IO;
using System.IO.Compression;
using System.Linq;
using System.Net;
using System.Net.Security;
using System.Security.Cryptography.X509Certificates;
using System.Text;
using System.Text.RegularExpressions;

namespace DMSkin.Core.Common
{
    /// 
    /// Http连接操作帮助类
    /// 
    public clast HTTP
    {
        public static HTTP New
        {
            get
            {
                return new HTTP();
            }
        }

        #region 预定义方变量

        //默认的编码
        private Encoding encoding = Encoding.Default;

        //Post数据编码
        private Encoding postencoding = Encoding.Default;

        //HttpWebRequest对象用来发起请求
        private HttpWebRequest request = null;

        //获取影响流的数据对象
        private HttpWebResponse response = null;

        //设置本地的出口ip和端口
        private IPEndPoint _IPEndPoint = null;

        #endregion 预定义方变量

        #region Public

        /// 
        /// 根据相传入的数据,得到相应页面数据
        /// 
        /// 参数类对象
        /// 返回HttpResult类型
        public HttpResult GetHtml(HttpItem item)
        {
            //返回参数
            HttpResult result = new HttpResult();
            try
            {
                //准备参数
                SetRequest(item);
            }
            catch (Exception ex)
            {
                //配置参数时出错
                return new HttpResult() { Cookie = string.Empty, Header = null, Html = ex.Message, StatusDescription = "配置参数时出错:" + ex.Message };
            }
            try
            {
                //请求数据
                using (response = (HttpWebResponse)request.GetResponse())
                {
                    GetData(item, result);
                }
            }
            catch (WebException ex)
            {
                if (ex.Response != null)
                {
                    using (response = (HttpWebResponse)ex.Response)
                    {
                        GetData(item, result);
                    }
                }
                else
                {
                    result.Html = ex.Message;
                }
            }
            catch (Exception ex)
            {
                result.Html = ex.Message;
            }
            if (item.IsToLower) result.Html = result.Html.ToLower();
            //重置request,response为空
            if (item.IsReset)
            {
                request = null;
                response = null;
            }
            return result;
        }

        public HttpResult GetResponseUri(HttpItem item)
        {
            //返回参数
            HttpResult result = new HttpResult();
            try
            {
                //准备参数
                SetRequest(item);
            }
            catch (Exception ex)
            {
                //配置参数时出错
                return new HttpResult() { Cookie = string.Empty, Header = null, Html = ex.Message, StatusDescription = "配置参数时出错:" + ex.Message };
            }
            try
            {
                //请求数据
                using (response = (HttpWebResponse)request.GetResponse())
                {
                    result.ResponseUri = response.ResponseUri.ToString();
                }
            }
            catch (Exception ex)
            {
                result.Html = ex.Message;
            }
            return result;
        }
        #endregion Public

        #region GetData

        /// 
        /// 获取数据的并解析的方法
        /// 
        /// 
        /// 
        private void GetData(HttpItem item, HttpResult result)
        {
            if (response == null)
            {
                return;
            }

            #region base

            //获取StatusCode
            result.StatusCode = response.StatusCode;
            //获取StatusDescription
            result.StatusDescription = response.StatusDescription;
            //获取Headers
            result.Header = response.Headers;
            //获取最后访问的URl
            result.ResponseUri = response.ResponseUri.ToString();
            //获取CookieCollection
            if (response.Cookies != null) result.CookieCollection = response.Cookies;
            //获取set-cookie
            if (response.Headers["set-cookie"] != null) result.Cookie = response.Headers["set-cookie"];

            #endregion base

            #region byte

            //处理网页Byte
            byte[] ResponseByte = GetByte();

            #endregion byte

            #region Html

            if (ResponseByte != null && ResponseByte.Length > 0)
            {
                //设置编码
                SetEncoding(item, result, ResponseByte);
                //得到返回的HTML
                result.Html = encoding.GetString(ResponseByte);
            }
            else
            {
                //没有返回任何Html代码
                result.Html = string.Empty;
            }

            #endregion Html
        }

        /// 
        /// 设置编码
        /// 
        /// HttpItem
        /// HttpResult
        /// byte[]
        private void SetEncoding(HttpItem item, HttpResult result, byte[] ResponseByte)
        {
            //是否返回Byte类型数据
            if (item.ResultType == ResultType.Byte) result.ResultByte = ResponseByte;
            //从这里开始我们要无视编码了
            if (encoding == null)
            {
                Match meta = Regex.Match(Encoding.Default.GetString(ResponseByte), "