您的位置:首页 > 理论基础 > 计算机网络

HttpHelpers类普通GET和POST方式,带Cookie和带证书验证模式

2011-09-19 15:52 375 查看
using System.Collections.Generic;  

using System.Linq;  

using System.Web;  

using System.Text;  

using System.Net;  

using System.IO;  

using System.Security.Cryptography.X509Certificates;  

using System.Net.Security;  

using System;  

   

/// <summary>  

///HttpHelpers 主要是实现Http方式的Get和Post方式请求  

/// </summary>  

public class HttpHelpers  

{  

    /// <summary>  

    /// 构造器实现默认属性的赋值  

    /// </summary>  

    public HttpHelpers()  

    {  

          

    }  

   

    #region 所有的属性  

   

    //访问的页面地址  

    private string RequestURl { get; set; }  

   

    //默认的编码  

    private Encoding encoding { get; set; }  

   

    //HttpWebRequest对象用来发起请求  

    private HttpWebRequest request { get; set; }  

   

    //获取影响流的数据对象  

    private HttpWebResponse response { get; set; }  

   

    //证书文件X509Certificate objx509 = new X509Certificate(Application.StartupPath + "\\123.cer");  

    X509Certificate objx509 { get; set; }  

   

    //请求方式目前只提供Post和Get方式  

    private string Method { get; set; }  

   

    //Accept属性  

    private string Accept { get; set; }  

   

    //ContentType属性  

    private string ContentType { get; set; }  

   

    //UserAgent属性  

    private string UserAgent { get; set; }  

   

    //Cookie列表  

    private CookieContainer cookie { get; set; }  

   

    //需要返回的数据对象  

    private string reutrnDate { get; set; }  

   

    //Post数据串  

    private string strPostdata { get; set; }  

   

    #endregion  

   

    #region 内部方法  

   

    //回调验证证书问题  

    private bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)  

    {  

        // 总是接受      

        return true;  

    }  

    private void load()  

    {  

        //设置请求方式为Post  

        request.Method = "GET";  

        request.Accept = "text/html, application/xhtml+xml, */*";  

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

    }  

   

    /// <summary>  

    /// 根据相传入的数据,得到相应页面数据  

    /// </summary>  

    /// <param name="strPostdata">传入的数据Post方式,get方式传NUll或者空字符串都可以</param>  

    /// <returns>string类型的响应数据</returns>  

    private string GetHttpRequestData()  

    {  

        try 

        {  

            //是否要添加证书验证  

            if (objx509 != null)  

            {  

                //这一句一定要写在创建连接的前面。使用回调的方法进行证书验证。  

                ServicePointManager.ServerCertificateValidationCallback =  

                    new System.Net.Security.RemoteCertificateValidationCallback(CheckValidationResult);  

            }  

   

            //创建request对象  

            request = (HttpWebRequest)WebRequest.Create(RequestURl);  

   

            //是否要添加证书验证  

            if (objx509 != null)  

                request.ClientCertificates.Add(objx509);  

   

            //是否带有Cookie值  

            if (cookie != null)  

                request.CookieContainer = cookie;  

   

            //当为post提交是需要填充数据  

            if (Method.Trim().ToLower() == "post")  

            {  

                byte[] buffer = encoding.GetBytes(strPostdata);  

                request.ContentLength = buffer.Length;  

                request.GetRequestStream().Write(buffer, 0, buffer.Length);  

            }  

   

            //得到请求的response  

            using (response = (HttpWebResponse)request.GetResponse())  

            {  

                //从这里开始我们要无视编码了  

                if (encoding == null)  

                    GetEonding();  

   

                //开始读取流并设置编码方式  

                using (StreamReader reader = new StreamReader(response.GetResponseStream(), encoding))  

                {  

                    //从当前开始读取整个流数据,默认为0所以读取的是全部,并返回数据  

                    reutrnDate = reader.ReadToEnd().ToString().Trim();  

                }  

            }  

        }  

        catch (Exception)  

        {  

            //这里是在发生异常时返回的错误信息  

            reutrnDate = "String Error";  

        }  

        return reutrnDate;  

    }  

   

    /// <summary>  

    /// 得到response对象的编码类型  

    /// </summary>  

    private void GetEonding()  

    {  

        if (response.CharacterSet.Trim() != "")  

            encoding = System.Text.Encoding.GetEncoding(response.CharacterSet.Trim());  

        else 

            encoding = System.Text.Encoding.UTF8;  

    }  

   

    #endregion  

   

    #region 公开方法  

   

    /// <summary>  

    /// 只设置一些简单参数的方式  

    /// </summary>  

    /// <param name="_url">URl地址</param>  

    /// <param name="_strPostdata">Post请求方式时传入的数据</param>  

    /// <param name="_Method">请求方式GET或者POST可以为空默认为GET</param>  

    /// <param name="_encoding">编码方式可以为空默认为UTF-8</param>  

    /// <param name="_Accept">Accept属性</param>  

    /// <param name="_ContentType">ContentType属性</param  

    /// <param name="_UserAgent">UserAgent属性</param  

    /// <param name="_cookie">CookieContainer列表</param  

    /// <param name="_objx509">X509Certificate证书对象</param  

    /// <returns>请求所得到的数据</returns>  

    public string GetString_null(string _url, string _strPostdata, string _Method, Encoding _encoding, string _Accept,  

        string _ContentType, string _UserAgent, CookieContainer _cookie, X509Certificate _objx509)  

    {  

        RequestURl = _url;  

        Method = _Method;  

        encoding = _encoding;  

        Accept = _Accept;  

        ContentType = _ContentType;  

        UserAgent = _UserAgent;  

        cookie = _cookie;  

        objx509 = _objx509;  

        return GetHttpRequestData();  

    }  

   

    /// <summary>  

    /// 只设置一些简单参数的方式  

    /// </summary>  

    /// <param name="_url">URl地址</param>  

    /// <param name="_strPostdata">Post请求方式时传入的数据</param>  

    /// <param name="_Method">请求方式GET或者POST可以为空默认为GET</param>  

    /// <param name="_encoding">编码方式可以为空默认为UTF-8</param>  

    /// <returns>请求所得到的数据</returns>  

    public string GetString_type(string _url, string _strPostdata, string _Method, Encoding _encoding)  

    {  

        RequestURl = _url;  

        strPostdata = _strPostdata;  

        Method = _Method;  

        encoding = _encoding;  

        return GetHttpRequestData();  

    }  

   

    //下面大家自己可以多写几种常用的,呵呵  

   

    #endregion  

   

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐