HttpHelper

来源:互联网 发布:win10usb端口添加失败 编辑:程序博客网 时间:2024/05/07 17:38
  1 /// <summary>  2 /// 类说明:HttpHelper类,用来实现Http访问,Post或者Get方式的,直接访问,带Cookie的,带证书的等方式,可以设置代理  3 /// 重要提示:请不要自行修改本类,如果因为你自己修改后将无法升级到新版本。如果确实有什么问题请到官方网站提建议,  4 /// 我们一定会及时修改  5 /// 编码日期:2011-09-20  6 /// 编 码 人:苏飞  7 /// 联系方式:361983679    8 /// 官方网址:http://www.sufeinet.com/thread-3-1-1.html  9 /// 修改日期:2015-09-08 10 /// 版 本 号:1.5 11 /// </summary> 12 using System; 13 using System.Collections.Generic; 14 using System.Text; 15 using System.Net; 16 using System.IO; 17 using System.Text.RegularExpressions; 18 using System.IO.Compression; 19 using System.Security.Cryptography.X509Certificates; 20 using System.Net.Security; 21  22 namespace DotNet.Utilities 23 { 24     /// <summary> 25     /// Http连接操作帮助类 26     /// </summary> 27     public class HttpHelper 28     { 29  30         #region 预定义方变量 31         //默认的编码 32         private Encoding encoding = Encoding.Default; 33         //Post数据编码 34         private Encoding postencoding = Encoding.Default; 35         //HttpWebRequest对象用来发起请求 36         private HttpWebRequest request = null; 37         //获取影响流的数据对象 38         private HttpWebResponse response = null; 39         //设置本地的出口ip和端口 40         private IPEndPoint _IPEndPoint = null; 41         #endregion 42  43         #region Public 44  45         /// <summary> 46         /// 根据相传入的数据,得到相应页面数据 47         /// </summary> 48         /// <param name="item">参数类对象</param> 49         /// <returns>返回HttpResult类型</returns> 50         public HttpResult GetHtml(HttpItem item) 51         { 52             //返回参数 53             HttpResult result = new HttpResult(); 54             try 55             { 56                 //准备参数 57                 SetRequest(item); 58             } 59             catch (Exception ex) 60             { 61                 result.Cookie = string.Empty; 62                 result.Header = null; 63                 result.Html = ex.Message; 64                 result.StatusDescription = "配置参数时出错:" + ex.Message; 65                 //配置参数时出错 66                 return result; 67             } 68             try 69             { 70                 //请求数据 71                 using (response = (HttpWebResponse)request.GetResponse()) 72                 { 73                     GetData(item, result); 74                 } 75             } 76             catch (WebException ex) 77             { 78                 if (ex.Response != null) 79                 { 80                     using (response = (HttpWebResponse)ex.Response) 81                     { 82                         GetData(item, result); 83                     } 84                 } 85                 else 86                 { 87                     result.Html = ex.Message; 88                 } 89             } 90             catch (Exception ex) 91             { 92                 result.Html = ex.Message; 93             } 94             if (item.IsToLower) result.Html = result.Html.ToLower(); 95             return result; 96         } 97         #endregion 98  99         #region GetData100 101         /// <summary>102         /// 获取数据的并解析的方法103         /// </summary>104         /// <param name="item"></param>105         /// <param name="result"></param>106         private void GetData(HttpItem item, HttpResult result)107         {108             #region base109             //获取StatusCode110             result.StatusCode = response.StatusCode;111             //获取StatusDescription112             result.StatusDescription = response.StatusDescription;113             //获取最后访问的URl114             result.ResponseUri = response.ResponseUri.ToString();115             //获取Headers116             result.Header = response.Headers;117             //获取CookieCollection118             if (response.Cookies != null) result.CookieCollection = response.Cookies;119             //获取set-cookie120             if (response.Headers["set-cookie"] != null) result.Cookie = response.Headers["set-cookie"];121             #endregion122 123             #region byte124             //处理网页Byte125             byte[] ResponseByte = GetByte();126             #endregion127 128             #region Html129             if (ResponseByte != null & ResponseByte.Length > 0)130             {131                 //设置编码132                 SetEncoding(item, result, ResponseByte);133                 //得到返回的HTML134                 result.Html = encoding.GetString(ResponseByte);135             }136             else137             {138                 //没有返回任何Html代码139                 result.Html = string.Empty;140             }141             #endregion142         }143         /// <summary>144         /// 设置编码145         /// </summary>146         /// <param name="item">HttpItem</param>147         /// <param name="result">HttpResult</param>148         /// <param name="ResponseByte">byte[]</param>149         private void SetEncoding(HttpItem item, HttpResult result, byte[] ResponseByte)150         {151             //是否返回Byte类型数据152             if (item.ResultType == ResultType.Byte) result.ResultByte = ResponseByte;153             //从这里开始我们要无视编码了154             if (encoding == null)155             {156                 Match meta = Regex.Match(Encoding.Default.GetString(ResponseByte), "<meta[^<]*charset=([^<]*)[\"']", RegexOptions.IgnoreCase);157                 string c = string.Empty;158                 if (meta != null && meta.Groups.Count > 0)159                 {160                     c = meta.Groups[1].Value.ToLower().Trim();161                 }162                 if (c.Length > 2)163                 {164                     try165                     {166                         encoding = Encoding.GetEncoding(c.Replace("\"", string.Empty).Replace("'", "").Replace(";", "").Replace("iso-8859-1", "gbk").Trim());167                     }168                     catch169                     {170                         if (string.IsNullOrEmpty(response.CharacterSet))171                         {172                             encoding = Encoding.UTF8;173                         }174                         else175                         {176                             encoding = Encoding.GetEncoding(response.CharacterSet);177                         }178                     }179                 }180                 else181                 {182                     if (string.IsNullOrEmpty(response.CharacterSet))183                     {184                         encoding = Encoding.UTF8;185                     }186                     else187                     {188                         encoding = Encoding.GetEncoding(response.CharacterSet);189                     }190                 }191             }192         }193         /// <summary>194         /// 提取网页Byte195         /// </summary>196         /// <returns></returns>197         private byte[] GetByte()198         {199             byte[] ResponseByte = null;200             MemoryStream _stream = new MemoryStream();201 202             //GZIIP处理203             if (response.ContentEncoding != null && response.ContentEncoding.Equals("gzip", StringComparison.InvariantCultureIgnoreCase))204             {205                 //开始读取流并设置编码方式206                 _stream = GetMemoryStream(new GZipStream(response.GetResponseStream(), CompressionMode.Decompress));207             }208             else209             {210                 //开始读取流并设置编码方式211                 _stream = GetMemoryStream(response.GetResponseStream());212             }213             //获取Byte214             ResponseByte = _stream.ToArray();215             _stream.Close();216             return ResponseByte;217         }218 219         /// <summary>220         /// 4.0以下.net版本取数据使用221         /// </summary>222         /// <param name="streamResponse"></param>223         private MemoryStream GetMemoryStream(Stream streamResponse)224         {225             MemoryStream _stream = new MemoryStream();226             int Length = 256;227             Byte[] buffer = new Byte[Length];228             int bytesRead = streamResponse.Read(buffer, 0, Length);229             while (bytesRead > 0)230             {231                 _stream.Write(buffer, 0, bytesRead);232                 bytesRead = streamResponse.Read(buffer, 0, Length);233             }234             return _stream;235         }236         #endregion237 238         #region SetRequest239 240         /// <summary>241         /// 为请求准备参数242         /// </summary>243         ///<param name="item">参数列表</param>244         private void SetRequest(HttpItem item)245         {246             // 验证证书247             SetCer(item);248             if (item.IPEndPoint != null)249             {250                 _IPEndPoint = item.IPEndPoint;251                 //设置本地的出口ip和端口252                 request.ServicePoint.BindIPEndPointDelegate = new BindIPEndPoint(BindIPEndPointCallback);253             }254             //设置Header参数255             if (item.Header != null && item.Header.Count > 0) foreach (string key in item.Header.AllKeys)256                 {257                     request.Headers.Add(key, item.Header[key]);258                 }259             // 设置代理260             SetProxy(item);261             if (item.ProtocolVersion != null) request.ProtocolVersion = item.ProtocolVersion;262             request.ServicePoint.Expect100Continue = item.Expect100Continue;263             //请求方式Get或者Post264             request.Method = item.Method;265             request.Timeout = item.Timeout;266             request.KeepAlive = item.KeepAlive;267             request.ReadWriteTimeout = item.ReadWriteTimeout;268             if (item.IfModifiedSince != null) request.IfModifiedSince = Convert.ToDateTime(item.IfModifiedSince);269             //Accept270             request.Accept = item.Accept;271             //ContentType返回类型272             request.ContentType = item.ContentType;273             //UserAgent客户端的访问类型,包括浏览器版本和操作系统信息274             request.UserAgent = item.UserAgent;275             // 编码276             encoding = item.Encoding;277             //设置安全凭证278             request.Credentials = item.ICredentials;279             //设置Cookie280             SetCookie(item);281             //来源地址282             request.Referer = item.Referer;283             //是否执行跳转功能284             request.AllowAutoRedirect = item.Allowautoredirect;285             if (item.MaximumAutomaticRedirections > 0)286             {287                 request.MaximumAutomaticRedirections = item.MaximumAutomaticRedirections;288             }289             //设置Post数据290             SetPostData(item);291             //设置最大连接292             if (item.Connectionlimit > 0) request.ServicePoint.ConnectionLimit = item.Connectionlimit;293         }294         /// <summary>295         /// 设置证书296         /// </summary>297         /// <param name="item"></param>298         private void SetCer(HttpItem item)299         {300             if (!string.IsNullOrEmpty(item.CerPath))301             {302                 //这一句一定要写在创建连接的前面。使用回调的方法进行证书验证。303                 ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(CheckValidationResult);304                 //初始化对像,并设置请求的URL地址305                 request = (HttpWebRequest)WebRequest.Create(item.URL);306                 SetCerList(item);307                 //将证书添加到请求里308                 request.ClientCertificates.Add(new X509Certificate(item.CerPath));309             }310             else311             {312                 //初始化对像,并设置请求的URL地址313                 request = (HttpWebRequest)WebRequest.Create(item.URL);314                 SetCerList(item);315             }316         }317         /// <summary>318         /// 设置多个证书319         /// </summary>320         /// <param name="item"></param>321         private void SetCerList(HttpItem item)322         {323             if (item.ClentCertificates != null && item.ClentCertificates.Count > 0)324             {325                 foreach (X509Certificate c in item.ClentCertificates)326                 {327                     request.ClientCertificates.Add(c);328                 }329             }330         }331         /// <summary>332         /// 设置Cookie333         /// </summary>334         /// <param name="item">Http参数</param>335         private void SetCookie(HttpItem item)336         {337             if (!string.IsNullOrEmpty(item.Cookie)) request.Headers[HttpRequestHeader.Cookie] = item.Cookie;338             //设置CookieCollection339             if (item.ResultCookieType == ResultCookieType.CookieCollection)340             {341                 request.CookieContainer = new CookieContainer();342                 if (item.CookieCollection != null && item.CookieCollection.Count > 0)343                     request.CookieContainer.Add(item.CookieCollection);344             }345         }346         /// <summary>347         /// 设置Post数据348         /// </summary>349         /// <param name="item">Http参数</param>350         private void SetPostData(HttpItem item)351         {352             //验证在得到结果时是否有传入数据353             if (!request.Method.Trim().ToLower().Contains("get"))354             {355                 if (item.PostEncoding != null)356                 {357                     postencoding = item.PostEncoding;358                 }359                 byte[] buffer = null;360                 //写入Byte类型361                 if (item.PostDataType == PostDataType.Byte && item.PostdataByte != null && item.PostdataByte.Length > 0)362                 {363                     //验证在得到结果时是否有传入数据364                     buffer = item.PostdataByte;365                 }//写入文件366                 else if (item.PostDataType == PostDataType.FilePath && !string.IsNullOrEmpty(item.Postdata))367                 {368                     StreamReader r = new StreamReader(item.Postdata, postencoding);369                     buffer = postencoding.GetBytes(r.ReadToEnd());370                     r.Close();371                 } //写入字符串372                 else if (!string.IsNullOrEmpty(item.Postdata))373                 {374                     buffer = postencoding.GetBytes(item.Postdata);375                 }376                 if (buffer != null)377                 {378                     request.ContentLength = buffer.Length;379                     request.GetRequestStream().Write(buffer, 0, buffer.Length);380                 }381             }382         }383         /// <summary>384         /// 设置代理385         /// </summary>386         /// <param name="item">参数对象</param>387         private void SetProxy(HttpItem item)388         {389             bool isIeProxy = false;390             if (!string.IsNullOrEmpty(item.ProxyIp))391             {392                 isIeProxy = item.ProxyIp.ToLower().Contains("ieproxy");393             }394             if (!string.IsNullOrEmpty(item.ProxyIp) && !isIeProxy)395             {396                 //设置代理服务器397                 if (item.ProxyIp.Contains(":"))398                 {399                     string[] plist = item.ProxyIp.Split(':');400                     WebProxy myProxy = new WebProxy(plist[0].Trim(), Convert.ToInt32(plist[1].Trim()));401                     //建议连接402                     myProxy.Credentials = new NetworkCredential(item.ProxyUserName, item.ProxyPwd);403                     //给当前请求对象404                     request.Proxy = myProxy;405                 }406                 else407                 {408                     WebProxy myProxy = new WebProxy(item.ProxyIp, false);409                     //建议连接410                     myProxy.Credentials = new NetworkCredential(item.ProxyUserName, item.ProxyPwd);411                     //给当前请求对象412                     request.Proxy = myProxy;413                 }414             }415             else if (isIeProxy)416             {417                 //设置为IE代理418             }419             else420             {421                 request.Proxy = item.WebProxy;422             }423         }424         #endregion425 426         #region private main427         /// <summary>428         /// 回调验证证书问题429         /// </summary>430         /// <param name="sender">流对象</param>431         /// <param name="certificate">证书</param>432         /// <param name="chain">X509Chain</param>433         /// <param name="errors">SslPolicyErrors</param>434         /// <returns>bool</returns>435         private bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors) { return true; }436 437         /// <summary>438         /// 通过设置这个属性,可以在发出连接的时候绑定客户端发出连接所使用的IP地址。 439         /// </summary>440         /// <param name="servicePoint"></param>441         /// <param name="remoteEndPoint"></param>442         /// <param name="retryCount"></param>443         /// <returns></returns>444         private IPEndPoint BindIPEndPointCallback(ServicePoint servicePoint, IPEndPoint remoteEndPoint, int retryCount)445         {446             return _IPEndPoint;//端口号447         }448         #endregion449     }450     /// <summary>451     /// Http请求参考类452     /// </summary>453     public class HttpItem454     {455         string _URL = string.Empty;456         /// <summary>457         /// 请求URL必须填写458         /// </summary>459         public string URL460         {461             get { return _URL; }462             set { _URL = value; }463         }464         string _Method = "GET";465         /// <summary>466         /// 请求方式默认为GET方式,当为POST方式时必须设置Postdata的值467         /// </summary>468         public string Method469         {470             get { return _Method; }471             set { _Method = value; }472         }473         int _Timeout = 100000;474         /// <summary>475         /// 默认请求超时时间476         /// </summary>477         public int Timeout478         {479             get { return _Timeout; }480             set { _Timeout = value; }481         }482         int _ReadWriteTimeout = 30000;483         /// <summary>484         /// 默认写入Post数据超时间485         /// </summary>486         public int ReadWriteTimeout487         {488             get { return _ReadWriteTimeout; }489             set { _ReadWriteTimeout = value; }490         }491         Boolean _KeepAlive = true;492         /// <summary>493         ///  获取或设置一个值,该值指示是否与 Internet 资源建立持久性连接默认为true。494         /// </summary>495         public Boolean KeepAlive496         {497             get { return _KeepAlive; }498             set { _KeepAlive = value; }499         }500         string _Accept = "text/html, application/xhtml+xml, */*";501         /// <summary>502         /// 请求标头值 默认为text/html, application/xhtml+xml, */*503         /// </summary>504         public string Accept505         {506             get { return _Accept; }507             set { _Accept = value; }508         }509         string _ContentType = "text/html";510         /// <summary>511         /// 请求返回类型默认 text/html512         /// </summary>513         public string ContentType514         {515             get { return _ContentType; }516             set { _ContentType = value; }517         }518         string _UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)";519         /// <summary>520         /// 客户端访问信息默认Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)521         /// </summary>522         public string UserAgent523         {524             get { return _UserAgent; }525             set { _UserAgent = value; }526         }527         Encoding _Encoding = null;528         /// <summary>529         /// 返回数据编码默认为NUll,可以自动识别,一般为utf-8,gbk,gb2312530         /// </summary>531         public Encoding Encoding532         {533             get { return _Encoding; }534             set { _Encoding = value; }535         }536         private PostDataType _PostDataType = PostDataType.String;537         /// <summary>538         /// Post的数据类型539         /// </summary>540         public PostDataType PostDataType541         {542             get { return _PostDataType; }543             set { _PostDataType = value; }544         }545         string _Postdata = string.Empty;546         /// <summary>547         /// Post请求时要发送的字符串Post数据548         /// </summary>549         public string Postdata550         {551             get { return _Postdata; }552             set { _Postdata = value; }553         }554         private byte[] _PostdataByte = null;555         /// <summary>556         /// Post请求时要发送的Byte类型的Post数据557         /// </summary>558         public byte[] PostdataByte559         {560             get { return _PostdataByte; }561             set { _PostdataByte = value; }562         }563         private WebProxy _WebProxy;564         /// <summary>565         /// 设置代理对象,不想使用IE默认配置就设置为Null,而且不要设置ProxyIp566         /// </summary>567         public WebProxy WebProxy568         {569             get { return _WebProxy; }570             set { _WebProxy = value; }571         }572 573         CookieCollection cookiecollection = null;574         /// <summary>575         /// Cookie对象集合576         /// </summary>577         public CookieCollection CookieCollection578         {579             get { return cookiecollection; }580             set { cookiecollection = value; }581         }582         string _Cookie = string.Empty;583         /// <summary>584         /// 请求时的Cookie585         /// </summary>586         public string Cookie587         {588             get { return _Cookie; }589             set { _Cookie = value; }590         }591         string _Referer = string.Empty;592         /// <summary>593         /// 来源地址,上次访问地址594         /// </summary>595         public string Referer596         {597             get { return _Referer; }598             set { _Referer = value; }599         }600         string _CerPath = string.Empty;601         /// <summary>602         /// 证书绝对路径603         /// </summary>604         public string CerPath605         {606             get { return _CerPath; }607             set { _CerPath = value; }608         }609         private Boolean isToLower = false;610         /// <summary>611         /// 是否设置为全文小写,默认为不转化612         /// </summary>613         public Boolean IsToLower614         {615             get { return isToLower; }616             set { isToLower = value; }617         }618         private Boolean allowautoredirect = false;619         /// <summary>620         /// 支持跳转页面,查询结果将是跳转后的页面,默认是不跳转621         /// </summary>622         public Boolean Allowautoredirect623         {624             get { return allowautoredirect; }625             set { allowautoredirect = value; }626         }627         private int connectionlimit = 1024;628         /// <summary>629         /// 最大连接数630         /// </summary>631         public int Connectionlimit632         {633             get { return connectionlimit; }634             set { connectionlimit = value; }635         }636         private string proxyusername = string.Empty;637         /// <summary>638         /// 代理Proxy 服务器用户名639         /// </summary>640         public string ProxyUserName641         {642             get { return proxyusername; }643             set { proxyusername = value; }644         }645         private string proxypwd = string.Empty;646         /// <summary>647         /// 代理 服务器密码648         /// </summary>649         public string ProxyPwd650         {651             get { return proxypwd; }652             set { proxypwd = value; }653         }654         private string proxyip = string.Empty;655         /// <summary>656         /// 代理 服务IP ,如果要使用IE代理就设置为ieproxy657         /// </summary>658         public string ProxyIp659         {660             get { return proxyip; }661             set { proxyip = value; }662         }663         private ResultType resulttype = ResultType.String;664         /// <summary>665         /// 设置返回类型String和Byte666         /// </summary>667         public ResultType ResultType668         {669             get { return resulttype; }670             set { resulttype = value; }671         }672         private WebHeaderCollection header = new WebHeaderCollection();673         /// <summary>674         /// header对象675         /// </summary>676         public WebHeaderCollection Header677         {678             get { return header; }679             set { header = value; }680         }681 682         private Version _ProtocolVersion;683 684         /// <summary>685         //     获取或设置用于请求的 HTTP 版本。返回结果:用于请求的 HTTP 版本。默认为 System.Net.HttpVersion.Version11。686         /// </summary>687         public Version ProtocolVersion688         {689             get { return _ProtocolVersion; }690             set { _ProtocolVersion = value; }691         }692         private Boolean _expect100continue = true;693         /// <summary>694         ///  获取或设置一个 System.Boolean 值,该值确定是否使用 100-Continue 行为。如果 POST 请求需要 100-Continue 响应,则为 true;否则为 false。默认值为 true。695         /// </summary>696         public Boolean Expect100Continue697         {698             get { return _expect100continue; }699             set { _expect100continue = value; }700         }701         private X509CertificateCollection _ClentCertificates;702         /// <summary>703         /// 设置509证书集合704         /// </summary>705         public X509CertificateCollection ClentCertificates706         {707             get { return _ClentCertificates; }708             set { _ClentCertificates = value; }709         }710         private Encoding _PostEncoding;711         /// <summary>712         /// 设置或获取Post参数编码,默认的为Default编码713         /// </summary>714         public Encoding PostEncoding715         {716             get { return _PostEncoding; }717             set { _PostEncoding = value; }718         }719         private ResultCookieType _ResultCookieType = ResultCookieType.String;720         /// <summary>721         /// Cookie返回类型,默认的是只返回字符串类型722         /// </summary>723         public ResultCookieType ResultCookieType724         {725             get { return _ResultCookieType; }726             set { _ResultCookieType = value; }727         }728 729         private ICredentials _ICredentials = CredentialCache.DefaultCredentials;730         /// <summary>731         /// 获取或设置请求的身份验证信息。732         /// </summary>733         public ICredentials ICredentials734         {735             get { return _ICredentials; }736             set { _ICredentials = value; }737         }738         /// <summary>739         /// 设置请求将跟随的重定向的最大数目740         /// </summary>741         private int _MaximumAutomaticRedirections;742 743         public int MaximumAutomaticRedirections744         {745             get { return _MaximumAutomaticRedirections; }746             set { _MaximumAutomaticRedirections = value; }747         }748 749         private DateTime? _IfModifiedSince = null;750         /// <summary>751         /// 获取和设置IfModifiedSince,默认为当前日期和时间752         /// </summary>753         public DateTime? IfModifiedSince754         {755             get { return _IfModifiedSince; }756             set { _IfModifiedSince = value; }757         }758         #region ip-port759         private IPEndPoint _IPEndPoint = null;760         /// <summary>761         /// 设置本地的出口ip和端口762         /// </summary>]763         /// <example>764         ///item.IPEndPoint = new IPEndPoint(IPAddress.Parse("192.168.1.1"),80);765         /// </example>766         public IPEndPoint IPEndPoint767         {768             get { return _IPEndPoint; }769             set { _IPEndPoint = value; }770         }771         #endregion772     }773     /// <summary>774     /// Http返回参数类775     /// </summary>776     public class HttpResult777     {778         private string _Cookie;779         /// <summary>780         /// Http请求返回的Cookie781         /// </summary>782         public string Cookie783         {784             get { return _Cookie; }785             set { _Cookie = value; }786         }787 788         private CookieCollection _CookieCollection;789         /// <summary>790         /// Cookie对象集合791         /// </summary>792         public CookieCollection CookieCollection793         {794             get { return _CookieCollection; }795             set { _CookieCollection = value; }796         }797         private string _html = string.Empty;798         /// <summary>799         /// 返回的String类型数据 只有ResultType.String时才返回数据,其它情况为空800         /// </summary>801         public string Html802         {803             get { return _html; }804             set { _html = value; }805         }806         private byte[] _ResultByte;807         /// <summary>808         /// 返回的Byte数组 只有ResultType.Byte时才返回数据,其它情况为空809         /// </summary>810         public byte[] ResultByte811         {812             get { return _ResultByte; }813             set { _ResultByte = value; }814         }815         private WebHeaderCollection _Header;816         /// <summary>817         /// header对象818         /// </summary>819         public WebHeaderCollection Header820         {821             get { return _Header; }822             set { _Header = value; }823         }824         private string _StatusDescription;825         /// <summary>826         /// 返回状态说明827         /// </summary>828         public string StatusDescription829         {830             get { return _StatusDescription; }831             set { _StatusDescription = value; }832         }833         private HttpStatusCode _StatusCode;834         /// <summary>835         /// 返回状态码,默认为OK836         /// </summary>837         public HttpStatusCode StatusCode838         {839             get { return _StatusCode; }840             set { _StatusCode = value; }841         }842         /// <summary>843         /// 最后访问的URl844         /// </summary>845         public string ResponseUri { get; set; }846         /// <summary>847         /// 获取重定向的URl848         /// </summary>849         public string RedirectUrl850         {851             get852             {853                 try854                 {855                     if (Header != null && Header.Count > 0)856                     {857                         if (Header["location"]!=null)858                         {859                             string locationurl = Header["location"].ToString().ToLower();860 861                             if (!string.IsNullOrEmpty(locationurl))862                             {863                                 bool b = locationurl.StartsWith("http://") || locationurl.StartsWith("https://");864                                 if (!b)865                                 {866                                     locationurl = new Uri(new Uri(ResponseUri), locationurl).AbsoluteUri;867                                 }868                             }869                             return locationurl;870                         }871                     }872                 }873                 catch { }874                 return string.Empty;875             }876         }877     }878     /// <summary>879     /// 返回类型880     /// </summary>881     public enum ResultType882     {883         /// <summary>884         /// 表示只返回字符串 只有Html有数据885         /// </summary>886         String,887         /// <summary>888         /// 表示返回字符串和字节流 ResultByte和Html都有数据返回889         /// </summary>890         Byte891     }892     /// <summary>893     /// Post的数据格式默认为string894     /// </summary>895     public enum PostDataType896     {897         /// <summary>898         /// 字符串类型,这时编码Encoding可不设置899         /// </summary>900         String,901         /// <summary>902         /// Byte类型,需要设置PostdataByte参数的值编码Encoding可设置为空903         /// </summary>904         Byte,905         /// <summary>906         /// 传文件,Postdata必须设置为文件的绝对路径,必须设置Encoding的值907         /// </summary>908         FilePath909     }910     /// <summary>911     /// Cookie返回类型912     /// </summary>913     public enum ResultCookieType914     {915         /// <summary>916         /// 只返回字符串类型的Cookie917         /// </summary>918         String,919         /// <summary>920         /// CookieCollection格式的Cookie集合同时也返回String类型的cookie921         /// </summary>922         CookieCollection923     }924 }

 

0 0
原创粉丝点击