当前位置:首页 >.NET > 正文内容

有关HTTP请求的辅助类

大滑稽11年前 (2014-03-24).NET1137

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Security;
using System.IO;
using System.Security.Cryptography.X509Certificates;

namespace 数据提交
{
    class HttpHelper
    {
        // public static CookieContainer cookies = new CookieContainer();

        public static string ErrorMesage = "";
        /// <summary>      
        /// 有关HTTP请求的辅助类   
        /// </summary>     
        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)";
        private static readonly string FireFoxAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.23) Gecko/20110920 Firefox/3.6.23";
        private static readonly string IE7 = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; InfoPath.2; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET4.0C; .NET4.0E)";
        private static readonly string IE = "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11";
        /// <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, string userAgent, string referer, ref CookieContainer cookies)
        {
            try
            {
                if (string.IsNullOrEmpty(url))
                {
                    throw new ArgumentNullException("url");
                }
                System.Net.HttpWebRequest request = WebRequest.Create(url) as System.Net.HttpWebRequest;

                if (!string.IsNullOrEmpty(userAgent))
                {
                    request.UserAgent = userAgent;
                }
                else
                {
                    request.UserAgent = DefaultUserAgent;
                }

                if (!string.IsNullOrEmpty(referer))
                {
                    request.Referer = referer;
                }

                //设置或获取Cookie
                if (cookies.Count == 0)
                {
                    request.CookieContainer = new CookieContainer();
                    cookies = request.CookieContainer;
                }
                else
                {
                    request.CookieContainer = cookies;
                }

                request.Method = "GET";
                request.Headers.Set("Cache-Control", "no-cache");
                //request.Headers.Set("Accept-Encoding", "gzip,deflate");
                request.Headers.Set("Accept-Language", "zh-cn");
                request.Headers.Set("Accept-Charset", "gb2312,utf-8");
                request.Accept = "*/*";
                request.ContentType = "application/x-www-form-urlencoded";
                request.AllowAutoRedirect = true;
                request.Timeout = 5000;


                //request.Headers.Set("X-Requested-With", "XMLHttpRequest");
                //request.Headers.Set("Origin", "https://dynamic.12306.cn");
                //request.Referer = referer;
                //request.Expect = null;
                //request.KeepAlive = true;

                return request.GetResponse() as HttpWebResponse;
            }
            catch (Exception ex)
            {
                ErrorMesage = ex.Message;
                return null;
            }
        }

        /// <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, string userAgent, Encoding requestEncoding, string referer, ref CookieContainer cookies)
        {
            try
            {
                if (string.IsNullOrEmpty(url))
                {
                    throw new ArgumentNullException(url);
                }
                if (requestEncoding == null)
                {
                    throw new ArgumentNullException("requestEncoding");
                }
                System.Net.HttpWebRequest request = null;              //如果是发送HTTPS请求       
                if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase))
                {
                    ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
                    request = WebRequest.Create(url) as System.Net.HttpWebRequest;
                    request.ProtocolVersion = HttpVersion.Version10;
                }
                else
                {
                    request = WebRequest.Create(url) as System.Net.HttpWebRequest;
                }

                if (!string.IsNullOrEmpty(userAgent))
                {
                    request.UserAgent = userAgent;
                }
                else
                {
                    request.UserAgent = DefaultUserAgent;
                }

                if (!string.IsNullOrEmpty(referer))
                {
                    request.Referer = referer;
                }

                request.Method = "POST";
                request.Headers.Set("Cache-Control", "no-cache");
                //request.Headers.Set("Accept-Encoding", "gzip,deflate,sdch");
                request.Headers.Set("Accept-Language", "zh-cn");
                request.Headers.Set("Accept-Charset", "gb2312,utf-8");
                request.Accept = "*/*";
                request.ContentType = "application/x-www-form-urlencoded";
                request.AllowAutoRedirect = true;
                request.Timeout = 5000;

                //设置或获取Cookie
                if (cookies.Count == 0)
                {
                    request.CookieContainer = new CookieContainer();
                    cookies = request.CookieContainer;
                }
                else
                {
                    request.CookieContainer = cookies;
                }

                //request.Headers.Set("X-Requested-With", "XMLHttpRequest");
                //request.Headers.Set("Origin", "https://dynamic.12306.cn");
                //request.Referer = referer;
                //request.Expect = null;
                //request.KeepAlive = true;
                //如果需要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 System.Net.HttpWebResponse;
            }
            catch (Exception ex)
            {
                ErrorMesage = ex.Message;
                return null;
            }
        }

        private static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)
        {
            return true; //总是接受        
        }

    }
}

 

扫描二维码推送至手机访问。

版权声明:本文由第★一★次发布,如需转载请注明出处。

本文链接:https://wpers.net/post/57.html

“有关HTTP请求的辅助类 ” 的相关文章

Cbo控件数据源绑定

 //Cbo控件数据源绑定DataTable DtType = noteType.GetTypeList("");         ...

C#遍历控件的方法

首先,要想遍历,就必须找到你想找的表单里面的所有控件,然后一个个的逐一比对,当找到了你需要的控件的时候,再做你需要的操作。1、foreach方法foreach (Control control in ...

Linq读写XML

         private List<News> GetNews(string html)    &n...

修改注册表限制软件使用次数

 private void Form1_Load(object sender, System.EventArgs e){RegistryKey RootKey,RegKey; //项名为:HKEY_CURRENT_USER\So...

c#中分页显示数据

     //c#中分页显示数据    public partial class Form1 : Form    {  ...

C#修改浏览器主页

string key = @"HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main";      &n...