HttpHelpers类普通GET和POST方式,带Cookie和带证书验证模式
参考路径:https://www.cnblogs.com/splendidme/archive/2011/09/14/2175364.html
/// <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, , 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 }