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
- httphelper
- HttpHelper
- HttpHelper
- C# httphelper
- C#HttpHelper类---苏飞版
- HttpHelper类使用
- HttpHelper类使用方法
- net 2.0 httphelper
- HttpHelper.cs类
- c# uploadimage - httphelper
- c# .net4 httphelper
- c# .net2 httphelper
- HttpHelper来自海哥男神
- HttpHelper代码(C#)
- ionic 联网工具 HttpHelper
- 一个不错的HttpHelper
- HttpHelper封装类
- httphelper优化 cookie自动处理
- c#smtp多线程
- vs2013中2.0类库提示是英文,解决方案
- 昆仑游戏[JS加密修改]
- 供销大集-JS修改
- C#记录程序运行时间记录显示
- HttpHelper
- PPS传奇生死
- StringHelper
- EncodingHelper
- Stream与byte[]与Image与string
- 红豆电信JS
- Android工程的编译过程
- C#中的WebBrowser控件的使用
- C# Webbrowser 常用方法及多线程调用