HttpWebRequest

Request 

封装一个请求信息类

    /// <summary>

    /// The request.

    /// </summary>

    public class Request

    {

        /// <summary>

        /// Initializes a new instance of the <see cref="Request"/> class.

        /// </summary>

        /// <param name="url">

        /// The url.

        /// </param>

        public Request(string url)

        {

            this.Url = url;

        }



        /// <summary>

        /// 请求目标地址

        /// </summary>

        public string Url { get; private set; }



        /// <summary>

        /// Referer HTTP 标头的值

        /// </summary>

        public string Referer { get; set; }



        /// <summary>

        /// Cookie

        /// </summary>

        public CookieContainer Cookie { get; set; }



        /// <summary>

        /// 代理

        /// </summary>

        public WebProxy Proxy { get; set; }



        /// <summary>

        /// 请求方式

        /// </summary>

        public HttpMethod HttpMethod { get; set; }



        /// <summary>

        /// 参数编码格式

        /// </summary>

        private Encoding encoding = Encoding.UTF8;



        /// <summary>

        /// 参数编码格式

        /// </summary>

        public Encoding Encoding

        {

            get

            {

                return this.encoding;

            }



            set

            {

                this.encoding = value;

            }

        }



        /// <summary>

        /// 是否与 Internet 资源建立持久性连接。

        /// </summary>

        public bool KeepAlive { get; set; }



        /// <summary>

        /// 请求超时时间

        /// </summary>

        private int timeout = 30 * 0x3e8;



        /// <summary>

        /// 请求超时时间(单位毫秒)

        /// </summary>

        public int Timeout

        {

            get

            {

                return this.timeout;

            }



            set

            {

                this.timeout = value;

            }

        }



        /// <summary>

        /// 请求参数

        /// </summary>

        public IDictionary<string, string> Parameters { get; set; }

    }

请求类返回一个Stream 对象

GetStream

该方法主要创建 一个http请求 和响应http内容处理

 var httpWebRequest = GetHttpWebRequest(request);

创建http请求 和响应参数设置

 response = (HttpWebResponse)httpWebRequest.GetResponse();

响应http内容

    /// <summary>

    /// The http utility.

    /// </summary>

    internal static class HttpRequestUtility

    {

        /// <summary>

        /// GetStream

        /// </summary>

        /// <param name="request">request</param>

        /// <returns>Stream</returns>

        internal static Stream GetStream(Request request)

        {

            HttpWebResponse response = null;

            Stream responseStream = null;

            try

            {

                var httpWebRequest = GetHttpWebRequest(request);

                response = (HttpWebResponse)httpWebRequest.GetResponse();

                responseStream = response.GetResponseStream();

                byte[] buffer = StreamToBytes(responseStream);

                Stream memoryStream = new MemoryStream(buffer);

                request.Cookie = httpWebRequest.CookieContainer;

                return memoryStream;

            }

            catch (System.Exception)

            {

                return null;

            }

            finally

            {

                if (responseStream != null)

                {

                    responseStream.Dispose();

                    responseStream.Close();

                }



                if (response != null)

                {

                    response.Dispose();

                    response.Close();

                }

            }

        }



        /// <summary>

        /// GteParameters

        /// </summary>

        /// <param name="parameters">parameters</param>

        /// <returns>string</returns>

        private static string GteParameters(IDictionary<string, string> parameters)

        {

            if (parameters == null || !parameters.Any())

            {

                return string.Empty;

            }



            return parameters.Join("&", p => p.Key + "=" + p.Value);

        }



        /// <summary>

        /// CreateUri

        /// </summary>

        /// <param name="request">url</param>

        /// <returns>Uri</returns>

        private static Uri CreateUri(Request request)

        {

            if (string.IsNullOrEmpty(request.Url))

            {

                throw new ArgumentNullException("url");

            }



            string url = request.Url;

            if (request.HttpMethod == HttpMethod.Get)

            {

                string parameters = GteParameters(request.Parameters);

                url = url + "?" + parameters;

            }



            Uri uri;

            if (Uri.TryCreate(url, UriKind.RelativeOrAbsolute, out uri))

            {

                return uri;

            }

            else

            {

                throw new ArgumentException("请求目标地址格式错误");

            }

        }



        /// <summary>

        /// 设置请求基本信息

        /// </summary>

        /// <param name="request">request</param>

        /// <returns>HttpWebRequest</returns>

        private static HttpWebRequest GetHttpWebRequest(Request request)

        {

            Uri uri = CreateUri(request);

            HttpWebRequest webRequest = WebRequest.CreateHttp(uri);

            HttpRequestCachePolicy policy = new HttpRequestCachePolicy(HttpRequestCacheLevel.NoCacheNoStore);

            webRequest.CachePolicy = policy;

            webRequest.Timeout = request.Timeout;

            webRequest.KeepAlive = request.KeepAlive;

            webRequest.Method = request.HttpMethod.ToString();

            webRequest.CookieContainer = request.Cookie;

            webRequest.Referer = request.Referer;

            webRequest.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; SV1; .NET CLR 2.0.1124)";

            webRequest.Headers.Add("Cache-Control", "no-cache");

            webRequest.Accept = "*/*";

            webRequest.Credentials = CredentialCache.DefaultCredentials;

            if (request.Proxy != null)

            {

                webRequest.Proxy = request.Proxy;

            }



            if (request.HttpMethod == HttpMethod.Post)

            {

                SetPostParameters(webRequest, request);

            }



            return webRequest;

        }



        /// <summary>

        /// 设置请求Post信息

        /// </summary>

        /// <param name="webRequest">httpWebRequest</param>

        /// <param name="request">request</param>

        private static void SetPostParameters(WebRequest webRequest, Request request)

        {

            string parameters = GteParameters(request.Parameters);

            byte[] bytes = request.Encoding.GetBytes(parameters);

            webRequest.ContentType = "application/x-www-form-urlencoded";

            webRequest.ContentLength = bytes.Length;

            using (Stream requestStream = webRequest.GetRequestStream())

            {

                requestStream.Write(bytes, 0, bytes.Length);

            }

        }



        /// <summary>

        /// 数据流转换

        /// </summary>

        /// <param name="stream">数据流</param>

        /// <returns>字节数组</returns>

        private static byte[] StreamToBytes(Stream stream)

        {

            List<byte> bytes = new List<byte>();

            int temp = stream.ReadByte();

            while (temp != -1)

            {

                bytes.Add((byte)temp);

                temp = stream.ReadByte();

            }



            return bytes.ToArray();

        }

    }

对应请求的内容处理

返回的内容可能是 超文本内容 或者 是图片等

    /// <summary>

    /// The http request html.

    /// </summary>

    public class HttpRequestService

    {

        /// <summary>

        /// 获取一个文本内容

        /// </summary>

        /// <param name="request">

        /// 请求信息

        /// </param>

        /// <returns>

        /// 结果

        /// </returns>

        public static string GetHttpRequest(Request request)

        {

            try

            {

                var stream = HttpRequestUtility.GetStream(request);

                using (StreamReader sr = new StreamReader(stream, request.Encoding))

                {

                    StringBuilder builder = new StringBuilder();

                    while (sr.Peek() != -1)

                    {

                        builder.Append(sr.ReadLine());

                    }



                    return builder.ToString();

                }

            }

            catch (System.Exception)

            {

                return null;

            }

        }



        /// <summary>

        /// 获取一张图片

        /// </summary>

        /// <param name="request">请求信息</param>

        /// <returns>图片</returns>

        public static Bitmap GetImage(Request request)

        {

            Bitmap map = null;

            Stream stream = null;

            try

            {

                stream = HttpRequestUtility.GetStream(request);

                byte[] buf = new byte[stream.Length];

                stream.Read(buf, 0, (int)stream.Length);

                map = new Bitmap(System.Drawing.Image.FromStream(stream));

                return map;

            }

            catch (System.Exception)

            {

                return null;

            }

            finally

            {

                if (stream != null)

                {

                    stream.Close();

                }



                if (map != null)

                {

                    map.Dispose();

                }

            }

        }

    }

 

4.5处理方法

你可能感兴趣的:(request)