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 }
相关文章推荐
- HttpHelpers类普通GET和POST方式,带Cookie和带证书验证模式
- HttpHelps类,用来实现Http访问,Post或者Get方式的,直接访问,带Cookie的,带证书的等方式,可以设置代理
- HttpHelps类,用来实现Http访问,Post或者Get方式的,直接访问,带Cookie的,带证书的等方式,可以设置代理
- Android中两种请求方式HttpGet和HttpPost验证用户登录
- Java 通过HttpClient 带证书方式请求Https协议网站 (Post方式带xml文档,Get以及Delete方式)
- java发送post和get请求(1)---HttpURLConnection方式
- HTTP协议传输中GET方式与POST方式区别
- jquery+ajax 的 data参数设置的内容,如何在HttpHandler的HttpContext中取得(包括post方式和get方式)
- AJAX学习笔记之 客户端请求方式 get 和post 模式
- HttpClient(访问网络) get方式,post方式。返回值有String,InputStream,byte[]
- HTTP get和post方式的区别
- Android Http get和post请求,URLConnection以及Cookie的处理
- Android 网络请求方式之HttpClient,GET,POST,PUT请求使用方法
- HttpClient 的GET(带参数)、POST请求方式,工具类方法
- 两种HTTP连接方式POST&GET的比较
- net1:post,get方式传值,读写cookie,读XML文件,写script语句,跳转页面,response与request类
- HttpURLConnection方式、HttpClient方式发送get、post数据给服务端
- HTTP 请求方式: GET和POST的比较
- C#带cookie Post和Get方式发送数据,保持cookie
- WCF消息安全模式之自定义用户名密码:Message CustomUserNamePassword wsHttpBinding 使用Windows Services宿主以及客户端免证书验证