有关HTTP请求的辅助类

  1. using System;  
    using System.Collections.Generic;  
    using System.Linq;  
    using System.Text;  
    using System.Net.Security;  
    using System.Security.Cryptography.X509Certificates;  
    using System.DirectoryServices.Protocols;  
    using System.ServiceModel.Security;  
    using System.Net;  
    using System.IO;  
    using System.IO.Compression;  
    using System.Text.RegularExpressions;  
    namespace BaiduCang  
    {  
        /// <summary>  
        /// 有关HTTP请求的辅助类  
        /// </summary>  
        public class HttpWebResponseUtility  
        {  
            private static readonly string DefaultUserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)";  
            /// <summary>  
            /// 创建GET方式的HTTP请求  
            /// </summary>  
            /// <param name="url">请求的URL</param>  
            /// <param name="timeout">请求的超时时间</param>  
            /// <param name="userAgent">请求的客户端浏览器信息,可以为空</param>  
            /// <param name="cookies">随同HTTP请求发送的Cookie信息,如果不需要身份验证可以为空</param>  
            /// <returns></returns>  
            public static HttpWebResponse CreateGetHttpResponse(string url,int? timeout, string userAgent,CookieCollection cookies)  
            {  
                if (string.IsNullOrEmpty(url))  
                {  
                    throw new ArgumentNullException("url");  
                }  
                HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;  
                request.Method = "GET";  
                request.UserAgent = DefaultUserAgent;  
                if (!string.IsNullOrEmpty(userAgent))  
                {  
                    request.UserAgent = userAgent;  
                }  
                if (timeout.HasValue)  
                {  
                    request.Timeout = timeout.Value;  
                }  
                if (cookies != null)  
                {  
                    request.CookieContainer = new CookieContainer();  
                    request.CookieContainer.Add(cookies);  
                }  
                return request.GetResponse() as HttpWebResponse;  
            }  
            /// <summary>  
            /// 创建POST方式的HTTP请求  
            /// </summary>  
            /// <param name="url">请求的URL</param>  
            /// <param name="parameters">随同请求POST的参数名称及参数值字典</param>  
            /// <param name="timeout">请求的超时时间</param>  
            /// <param name="userAgent">请求的客户端浏览器信息,可以为空</param>  
            /// <param name="requestEncoding">发送HTTP请求时所用的编码</param>  
            /// <param name="cookies">随同HTTP请求发送的Cookie信息,如果不需要身份验证可以为空</param>  
            /// <returns></returns>  
            public static HttpWebResponse CreatePostHttpResponse(string url,IDictionary<string,string> parameters,int? timeout, string userAgent,Encoding requestEncoding,CookieCollection cookies)  
            {  
                if (string.IsNullOrEmpty(url))  
                {  
                    throw new ArgumentNullException("url");  
                }  
                if(requestEncoding==null)  
                {  
                    throw new ArgumentNullException("requestEncoding");  
                }  
                HttpWebRequest request=null;  
                //如果是发送HTTPS请求  
                if(url.StartsWith("https",StringComparison.OrdinalIgnoreCase))  
                {  
                    ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);  
                    request = WebRequest.Create(url) as HttpWebRequest;  
                    request.ProtocolVersion=HttpVersion.Version10;  
                }  
                else  
                {  
                    request = WebRequest.Create(url) as HttpWebRequest;  
                }  
                request.Method = "POST";  
                request.ContentType = "application/x-www-form-urlencoded";  
                  
                if (!string.IsNullOrEmpty(userAgent))  
                {  
                    request.UserAgent = userAgent;  
                }  
                else  
                {  
                    request.UserAgent = DefaultUserAgent;  
                }  
      
                if (timeout.HasValue)  
                {  
                    request.Timeout = timeout.Value;  
                }  
                if (cookies != null)  
                {  
                    request.CookieContainer = new CookieContainer();  
                    request.CookieContainer.Add(cookies);  
                }  
                //如果需要POST数据  
                if(!(parameters==null||parameters.Count==0))  
                {  
                    StringBuilder buffer = new StringBuilder();  
                    int i = 0;  
                    foreach (string key in parameters.Keys)  
                    {  
                        if (i > 0)  
                        {  
                            buffer.AppendFormat("&{0}={1}", key, parameters[key]);  
                        }  
                        else  
                        {  
                            buffer.AppendFormat("{0}={1}", key, parameters[key]);  
                        }  
                        i++;  
                    }  
                    byte[] data = requestEncoding.GetBytes(buffer.ToString());  
                    using (Stream stream = request.GetRequestStream())  
                    {  
                        stream.Write(data, 0, data.Length);  
                    }  
                }  
                return request.GetResponse() as HttpWebResponse;  
            }  
      
            private static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)  
            {  
                return true; //总是接受  
            }  
        }  
    }  
    


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值