HttpHelpers类普通GET和POST方式,带Cookie和带证书验证模式
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 }
HttpHelpers类普通GET和POST方式,带Cookie和带证书验证模式的更多相关文章
- HttpHelps类,用来实现Http访问,Post或者Get方式的,直接访问,带Cookie的,带证书的等方式,可以设置代理
原文地址:http://blog.csdn.net/cdefg198/article/details/8315438 万能框架:http://www.sufeinet.com/forum.php?mo ...
- python装饰器、继承、元类、mixin,四种給类动态添加类属性和方法的方式(一)
介绍装饰器.继承.元类.mixin,四种給类动态添加类属性和方法的方式 有时候需要給类添加额外的东西,有些东西很频繁,每个类都需要,如果不想反复的复制粘贴到每个类,可以动态添加. # coding=u ...
- Struts2框架(3)---Action类的3种书写方式
Action类的3种书写方式 本文主要写有关写Action类的3种书写方式: (1)第一种 Action可以是POJO (简单模型对象) 不需要继承任何父类 也不需要实现任何接口 (2)实现Acti ...
- urllib2 post请求方式,带cookie,添加请求头
#encoding = utf-8 import urllib2import urllib url = 'http://httpbin.org/post'data={"name": ...
- C#中关于增强类功能的几种方式
C#中关于增强类功能的几种方式 本文主要讲解如何利用C#语言自身的特性来对一个类的功能进行丰富与增强,便于拓展现有项目的一些功能. 拓展方法 扩展方法被定义为静态方法,通过实例方法语法进行调用.方法的 ...
- C# 中一些类关系的判定方法 C#中关于增强类功能的几种方式 Asp.Net Core 轻松学-多线程之取消令牌
1. IsAssignableFrom实例方法 判断一个类或者接口是否继承自另一个指定的类或者接口. public interface IAnimal { } public interface ID ...
- String类对象两种实例化方式比较
第一种:直接赋值 String str = "hello!" ; 在java中,有一个字符串常量池,对于这种直接赋值的,会直接写进常量池(常量池里面不存在其value,) 自JD ...
- cc4a-c++类定义与struct定义方式代码示范
cc4a-c++类定义与struct定义方式代码示范 #include <iostream> #include <string> using namespace std; st ...
- 【HTTP header】【Access-Control-Allow-Credentials】跨域Ajax请求时是否带Cookie的设置
1. 无关Cookie跨域Ajax请求 客户端 以 Jquery 的 ajax 为例: $.ajax({ url : 'http://remote.domain.com/corsrequest', d ...
随机推荐
- pycharm中运行成功的python代码在jenkin中运行问题总结
我们在用selenium+python完成了项目的UI自动化后,一般用jekins持续集成工具来定期运行,python程序在pycharm中编辑运行成功,但在jenkins中运行失败的两个问题,整理如 ...
- 1.PHP连接mysql
1.使用mysqli_connect()函数连接到MySQL数据库: mysqli_connect()函数的格式如下: mysqli_connect('MySQL服务器地址','用户名','用户密 ...
- Multiple dex files define Lcom/google/gson/internal/Streams$AppendableWriter$CurrentWrite;
开发中引入第三方 aar 时编译同过,运行时出现问题: Multiple dex files define Lcom/google/gson/internal/Streams$AppendableWr ...
- react学习2
props,state与render函数的关系 react,父组件的state中的变量改变,则相应的render函数也会执行,返回新的视图,同时父组件的子组件通过props获取父组件的state的变量 ...
- ApplicationListener接口的生命周期
create:游戏初次创建时被调用,一般在这里创建ApplicationListener对象,初始化布景信息,将数据或UI布局绑定到监听器等,执行完该方法后会执行resize方法,是游戏创建立即执行的 ...
- jQuery判断鼠标滚动方向
var scrolltop = new Array(); var index = 0; scrolltop[0] = 0; $(document).scroll(function(){ index + ...
- 与python的三天
#导入海龟图 import turtleturtle.showturtle()turtle.width(20)liebiao = ['red','blue','yellow','green','pur ...
- Angularjs 动态创建属性
循环输出 for (var i = 1; i < 7; i++) { var res='res'+i; $scope[res]=i; }
- 23. Merge k Sorted Lists (JAVA)
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. E ...
- 通信导论-IP数据网络基础(3)
ICMP(IP辅助协议)--网际控制报文协议 ICMP报文种类:ICMP差错报文(终点不可达.时间超过等5种)和ICMP询问报文(回送请求和回答请求.时间戳请求和回答报文2种) ICMP是一种集差错报 ...