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

/// <summary>
/// 类说明:HttpHelps类,用来实现Http访问,Post或者Get方式的,直接访问,带Cookie的,带证书的等方式
/// 编码日期:2011-09-13
 
/// </summary>using System;
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()
    {
        //设置请求方式为Post
        request.Method = "GET";
        request.Accept = "text/html, application/xhtml+xml, */*";
        request.ContentType = "application/x-www-form-urlencoded";
    }
  
    #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;
    }
  
    /// <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 _Method, Encoding _encoding)
    {
        RequestURl = _url;
        Method = _Method;
        encoding = _encoding;
        return GetHttpRequestData();
    }
  
    //下面大家自己可以多写几种常用的,呵呵
  
    #endregion
  
}

  

posted on 2011-09-14 08:28  SplendidMe  阅读(892)  评论(0编辑  收藏  举报