zoukankan      html  css  js  c++  java
  • HttpWebRequest,HttpWebResponse 使用

    目的:工作中已经两次使用了,特此记录一下,并写好注释
        /// <summary>
        /// HttpWebRequest的基本配置
        /// </summary>
        public class HttpConfig
        {
            /// <summary>
            /// 协议:http/https
            /// </summary>
            public string protocol
            {
                set;
                get;
            }
    
            /// <summary>
            /// 发送端发送的数据格式
            /// </summary>
            public string contentType
            {
                set;
                get;
            }
    
            /// <summary>
            /// 客户端希望接受的数据类型
            /// </summary>
            public string accept
            {
                set;
                get;
            }
    
            /// <summary>
            /// 标识请求者的一些信息,如浏览器类型和版本、操作系统,使用语言等信息(IE,Firefox以“Mozilla/....”开头)
            /// </summary>
            public string userAgent
            {
                set;
                get;
            }
    
            /// <summary>
            /// 超时时间
            /// </summary>
            public int timeOut
            {
                set;
                get;
            }
    
            /// <summary>
            /// 请求body的编码类型:utf-8/gbk2312/gbk
            /// </summary>
            public string encoding
            {
                set;
                get;
            }
    
            /// <summary>
            /// 请求方式:GET/POST
            /// </summary>
            public string method
            {
                set;
                get;
            }
    
            /// <summary>
            /// 是否保持持续连接。默认为true
            /// </summary>
            public bool keepAlive
            {
                set;
                get;
            }
    
            /// <summary>
            /// cookie集合
            /// </summary>
            public CookieContainer cc = null;
    
            /// <summary>
            /// http header集合
            /// </summary>
            public WebHeaderCollection whc = null;
    
            public HttpConfig()
            {
                protocol = "http";
                contentType = "application/xml;charset=utf-8";
                accept = "application/xml";
                userAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)";
                timeOut = 15;
                encoding = "utf-8";
                method = "POST";
                keepAlive = false;
            }
    
            public HttpConfig(Dictionary<string, string> dctCookieKeyValus, string Domain, Dictionary<string, string> dctHeaderKeyValus)
                : this()
            {
                GetCookieContainer(dctCookieKeyValus, Domain);
                GetWebHeaderCollection(dctHeaderKeyValus);
            }
    
            /// <summary>
            /// 设置cookies
            /// </summary>
            /// <param name="dctKeyValus"></param>
            /// <param name="Domain"></param>
            public void GetCookieContainer(Dictionary<string, string> dctKeyValus, string Domain)
            {
                if (dctKeyValus.Count > 0)
                {
                    cc = new CookieContainer();
                    foreach (string key in dctKeyValus.Keys)
                    {
                        Cookie cookie = new Cookie(key, dctKeyValus[key]);
                        cookie.Domain = "";
                        cc.Add(cookie);
                    }
                }
            }
    
            /// <summary>
            /// 设置httpheaders
            /// </summary>
            /// <param name="dctKeyValus"></param>
            public void GetWebHeaderCollection(Dictionary<string, string> dctKeyValus)
            {
                if (dctKeyValus.Count > 0)
                {
                    whc = new WebHeaderCollection();
                    foreach (string key in dctKeyValus.Keys)
                    {
                        whc.Add(string.Format("{0}:{1}", key, dctKeyValus[key]));
                    }
                }
            }
        }
    
        public class HttpRequestAndResponse
        {
            HttpConfig httpConfig = null;
    
            public HttpRequestAndResponse(HttpConfig httpconfig)
            {
                httpConfig = httpconfig;
            }
    
            /// <summary>
            /// 调过https验证
            /// </summary>
            private static bool CheckValidationResult(object sender, X509Certificate certificate,
                                                  X509Chain chain, SslPolicyErrors errors)
            {
                return true;
            }
    
            public string RequestAndResponse(string url, string requestXML, ref string errString)
            {
                string response = "";
                HttpWebRequest req = null;
                HttpWebResponse res = null;
                try
                {
                    ServicePointManager.ServerCertificateValidationCallback =
                    new RemoteCertificateValidationCallback(CheckValidationResult);
    
                    /*最大并接数*************************************************************/
                    ServicePointManager.DefaultConnectionLimit = 200;//最大并发连接数
                    //如果写在配置文件里 app.config
                    // <system.net>
                    //  <connectionManagement>
                    //    <!--表示把对任何域名的请求最大http连接数都设置为200-->
                    //    <add address = "*" maxconnection = "200" />
                    //  </connectionManagement>
                    //</system.net>
    
                    req = WebRequest.Create(url) as HttpWebRequest;
    
                    /*HttpWebRequest的基本属性设置*************************************************************/
                    req.ProtocolVersion = HttpVersion.Version10;
                    req.UserAgent = httpConfig.userAgent;
                    req.KeepAlive = httpConfig.keepAlive;
                    req.Timeout = 1000 * httpConfig.timeOut;
                    req.Method = httpConfig.method;
                    req.Accept = httpConfig.accept;
                    req.ContentType = httpConfig.contentType;
    
                    /*写入http头部信息*************************************************************************/
                    if (httpConfig.whc != null)
                        req.Headers = httpConfig.whc;
    
                    /*cookie拼接*************************************************************/
                    if (httpConfig.cc != null)
                        req.CookieContainer = httpConfig.cc;
    
                    /*写入requestXML***************************************************************************/
                    if (!string.IsNullOrEmpty(requestXML))
                    {
                        byte[] bytes = System.Text.Encoding.GetEncoding(httpConfig.encoding).GetBytes(requestXML);
                        if (bytes.Length > 0)
                        {
                            req.ContentLength = bytes.Length;
                            using (Stream reqStream = req.GetRequestStream())
                            {
                                reqStream.Write(bytes, 0, bytes.Length);
                                reqStream.Close();
                            }
                        }
                    }
    
                    /*HttpWebResponse获取服务器数据**************************************************************/
                    res = req.GetResponse() as HttpWebResponse;
                    using (Stream resStream = res.GetResponseStream())
                    {
                        using (StreamReader resStreamReader = new StreamReader(resStream, Encoding.GetEncoding(httpConfig.encoding)))
                        {
                            response = resStreamReader.ReadToEnd();
                        }
                    }
                }
                catch (WebException e)
                {
                    HttpWebResponse exceptionRes = e.Response as HttpWebResponse;
                    errString = "#Status-line
    ";
                    string format = "protocolVersion:{0}	statusCode:{1}	statusDescription:{2}
    ";
                    errString += string.Format(format, exceptionRes.ProtocolVersion, Convert.ToInt32(exceptionRes.StatusCode), exceptionRes.StatusDescription);
    
                    errString += "#Header
    ";
                    format = "num[{0}]:({1}:{2})
    ";
                    for (int i = 0; i < exceptionRes.Headers.Count; i++)
                    {
                        errString += string.Format(format, i, exceptionRes.Headers.Keys[i], exceptionRes.Headers[i]);
                    }
    
                    errString += "#Body
    ";
                    using (Stream resStream = exceptionRes.GetResponseStream())
                    {
                        using (StreamReader resStreamReader = new StreamReader(resStream, Encoding.GetEncoding(httpConfig.encoding)))
                        {
                            errString += resStreamReader.ReadToEnd() + "
    ";
                            resStreamReader.Close();
                            resStream.Close();
                        }
                    }
                    errString += "#end
    ";
    
                    exceptionRes.Close();
                }
                catch (Exception e)
                {
                    errString = e.ToString();
                }
                finally
                {
                    if (res!= null)
                    {
                        res.Close();
                        res = null;
                    }
    
                    if (req != null)
                    {
                        req.Abort();
                        req = null;
                    }
                }
    
                return response;
            }
        }
    

      

  • 相关阅读:
    textRNN & textCNN的网络结构与代码实现!
    四步理解GloVe!(附代码实现)
    NLP系列文章:子词嵌入(fastText)的理解!(附代码)
    自然语言处理(NLP)的一般处理流程!
    强化学习(Reinforcement Learning)中的Q-Learning、DQN,面试看这篇就够了!
    迁移学习(Transfer),面试看这些就够了!(附代码)
    白话--长短期记忆(LSTM)的几个步骤,附代码!
    三步理解--门控循环单元(GRU),TensorFlow实现
    Django框架1——视图和URL配置
    os模块
  • 原文地址:https://www.cnblogs.com/yaosj/p/6723205.html
Copyright © 2011-2022 走看看