Exemple #1
0
 /// <summary>
 /// 根据相传入的数据,得到相应页面数据
 /// </summary>
 /// <param name="objHttpItem">参数类对象</param>
 /// <returns>返回HttpResult类型</returns>
 public HttpResult GetHtml(HttpItem objHttpItem)
 {
     //返回参数
     var result = new HttpResult();
     try
     {
         //准备参数
         SetRequest(objHttpItem);
     }
     catch (Exception ex)
     {
         result = new HttpResult
         {
             Cookie = string.Empty,
             Header = null,
             Html = ex.Message,
             StatusDescription = "配置参数时出错:" + ex.Message
         };
         return result;
     }
     try
     {
         using (_response = (HttpWebResponse)_request.GetResponse())
         {
             result.StatusCode = _response.StatusCode;
             result.StatusDescription = _response.StatusDescription;
             result.Header = _response.Headers;
             if (_response.Cookies != null) result.CookieCollection = _response.Cookies;
             if (_response.Headers["set-cookie"] != null) result.Cookie = _response.Headers["set-cookie"];
             //GZIIP处理
             MemoryStream stream =
                 GetMemoryStream(_response.ContentEncoding.Equals("gzip",
                     StringComparison.InvariantCultureIgnoreCase)
                     ? // ReSharper disable AssignNullToNotNullAttribute
                     new GZipStream(_response.GetResponseStream(), CompressionMode.Decompress)
                     : // ReSharper restore AssignNullToNotNullAttribute
                     _response.GetResponseStream());
             //获取Byte
             byte[] rawResponse = stream.ToArray();
             stream.Close();
             //是否返回Byte类型数据
             if (objHttpItem.ResultType == ResultType.Byte) result.ResultByte = rawResponse;
             //从这里开始我们要无视编码了
             if (_encoding == null)
             {
                 Match meta = Regex.Match(Encoding.Default.GetString(rawResponse),
                     "<meta([^<]*)charset=([^<]*)[\"']", RegexOptions.IgnoreCase);
                 string charter = (meta.Groups.Count > 1) ? meta.Groups[2].Value.ToLower() : string.Empty;
                 if (charter.Length > 2)
                     _encoding =
                         Encoding.GetEncoding(
                             charter.Trim()
                                 .Replace("\"", "")
                                 .Replace("'", "")
                                 .Replace(";", "")
                                 .Replace("iso-8859-1", "gbk"));
                 else
                 {
                     _encoding = string.IsNullOrEmpty(_response.CharacterSet)
                         ? Encoding.UTF8
                         : Encoding.GetEncoding(_response.CharacterSet);
                 }
             }
             //得到返回的HTML
             result.Html = _encoding.GetString(rawResponse);
         }
     }
     catch (WebException ex)
     {
         //这里是在发生异常时返回的错误信息
         _response = (HttpWebResponse)ex.Response;
         result.Html = ex.Message;
         if (_response != null)
         {
             result.StatusCode = _response.StatusCode;
             result.StatusDescription = _response.StatusDescription;
         }
     }
     catch (Exception ex)
     {
         result.Html = ex.Message;
     }
     if (objHttpItem.IsToLower) result.Html = result.Html.ToLower();
     return result;
 }