/// <summary> /// 根据传入的参数,得到相应Http请求数据(唯一公开方法) /// </summary> /// <param name="item">参数类对象</param> /// <returns>返回HttpResult类型</returns> public HttpResult GetHttpRequestData(HttpRequestParam item) { ////返回参数 HttpResult result = new HttpResult(); try { try { ////准备参数 this.SetRequest(item); } catch (Exception ex) { // 注释掉,业务层捕获异常,可以根据网络异常重试 return new HttpResult() { Cookie = string.Empty, Header = null, Html = ex.Message, StatusDescription = "出现异常:" + ex.Message }; throw ex; } try { ////请求数据 using (this.response = (HttpWebResponse)this.request.GetResponse()) { this.GetData(item, result); } } catch (Exception ex) { result.Html = ex.ToString(); LogManager.Log.WriteAppException(new AppException("获取返回数据异常", ex, ExceptionLevel.Info)); throw ex; } } finally { if (item.IsWriteLog) { MInteractionParam param = new MInteractionParam() { DicContext = null, Module = "HttpHelper", Key1 = item.ProxyBusinessName, Key2 = item.Method.ToUpper(), SendAddress = item.URL, SendContent = this.GetRequestInfo(item), ReceiveContent = result.Html, Message = this.GetRequestProxy(item), }; LogManager.Log.InteractionLog(param); } this.AbortRequest(); } return result; }
/// <summary> /// 设置编码 /// </summary> /// <param name="item">HttpItem</param> /// <param name="result">HttpResult</param> /// <param name="responseByte">byte[]</param> private void SetEncoding(HttpRequestParam item, HttpResult result, byte[] responseByte) { ////是否返回Byte类型数据 if (item.ResultType == ResultType.Byte) { result.ResultByte = responseByte; } if (item.Encoding == null) { Match meta = Regex.Match(Encoding.Default.GetString(responseByte), "<meta[^<]*charset=([^<]*)[\"']", RegexOptions.IgnoreCase); string c = string.Empty; if (meta != null && meta.Groups.Count > 0) { c = meta.Groups[1].Value.ToLower().Trim(); } if (c.Length > 2) { try { item.Encoding = Encoding.GetEncoding(c.Replace("\"", string.Empty).Replace("'", string.Empty).Replace(";", string.Empty).Replace("iso-8859-1", "gbk").Trim()); } catch { if (string.IsNullOrEmpty(this.response.CharacterSet)) { item.Encoding = Encoding.UTF8; } else { item.Encoding = Encoding.GetEncoding(this.response.CharacterSet); } } } else { if (string.IsNullOrEmpty(this.response.CharacterSet)) { item.Encoding = Encoding.UTF8; } else { item.Encoding = Encoding.GetEncoding(this.response.CharacterSet); } } } if (item.Encoding == null) { item.Encoding = Encoding.UTF8; } }
/// <summary> /// 获取数据的并解析的方法 /// </summary> /// <param name="item">The item.</param> /// <param name="result">The result.</param> private void GetData(HttpRequestParam item, HttpResult result) { ////获取StatusCode result.StatusCode = this.response.StatusCode; ////获取StatusDescription result.StatusDescription = this.response.StatusDescription; ////获取Headers result.Header = this.response.Headers; ////获取重定向路径 if (this.response.ResponseUri != null && this.response.ResponseUri.ToString() != item.URL) { result.ResponseUrl = this.response.ResponseUri.ToString(); } ////获取CookieCollection if (item.ResultCookieType == ResultCookieType.CookieCollection && this.request.CookieContainer != null) { result.CookieCollection = this.request.CookieContainer.GetCookies(this.request.RequestUri); } ////获取set-cookie if (this.response.Headers["set-cookie"] != null) { result.Cookie = this.ProcessCookies(item.Cookie, this.response.Headers["set-cookie"]); } ////处理网页Byte byte[] responseByte = this.GetByte(); if (responseByte != null && responseByte.Length > 0) { ////设置编码 this.SetEncoding(item, result, responseByte); ////得到返回的HTML result.Html = item.Encoding.GetString(responseByte); } else { ////没有返回任何Html代码 result.Html = string.Empty; } }