/// <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; }