コード例 #1
0
ファイル: HttpInstance.cs プロジェクト: HelloAmy/01component
        /// <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;
        }
コード例 #2
0
ファイル: HttpInstance.cs プロジェクト: HelloAmy/01component
        /// <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;
            }
        }
コード例 #3
0
ファイル: HttpInstance.cs プロジェクト: HelloAmy/01component
        /// <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;
            }
        }