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 ...
随机推荐
- FPGA——入手(零)
前几天正点原子团队退出了FPGA开发板,我就买了一套.我想的是,多学一点东西,即使到最后积累下的东西少,但是面是广的,以后可以更好的选择一种深入.就入手了新起点FPGA开发板,新起点算是开拓者的阉割版 ...
- jquery+ajax搜索并分页
定义一个点击事件,获取关键词,传到后台,根据关键词搜索并分页.获取根据关键词分页后的数据,展示到前台.直接替换原来的数据. //接收当前页 $page = Request::instance()-&g ...
- sha256_transform
DECLSPEC void sha256_transform (const u32 *w0, const u32 *w1, const u32 *w2, const u32 *w3, u32 *dig ...
- COM接口调用,CreateDispatch失败的问题
有一个自动化处理Office文档的程序,原本运行的很好,基于效率和UI效果的问题,改成了多线程处理,编译没问题,一运行就报错找不到Office软件. 程序中产生错误的地方就是创建COM对象失败,以前好 ...
- 2019/4/17 Linux学习
一.Linux的文件系统 其中/prov./srv./sys 文件为文件系统,技术不过硬不要去修改:二.关于Xshell.Xft1.服务器的端口可有65535个可设置,开的越多安全性越差:2.远程登录 ...
- eclipse与idea快捷键对比以及idea debug、git快捷键
eclipse与idea快捷键 表格中的空格都是忘记了~ 功能 eclipse idea 生成返回值对象 alt+shift+L ctrl+alt+V 找到启动类 ctrl+alt+Home 类的 ...
- 3G设置linux路由-iptables配置
1.如何区分iptables的PREROUTING和POSTROUTING链 (引自http://jingyan.baidu.com/article/aa6a2c143d84470d4c19c4cf. ...
- Linux开始结束ping命令
ctrl+c可以终止ping ctrl+z可以暂停ping,该暂停只是把进程放到后台去了,使用命令fg可以调出到前台来 通过以下命令可以设置次数: ping -c 10 (次数) ip(域名) ...
- TOMCAT程序的层级目录
web | |---------js,jsp,html,css(资源文件在web根目录下面 可以被浏览器直接访问) |---------WEB-INF(配置文件web.xml lib---jar ...
- Windows+Apache+mod_wsgi+Flask部署方法
环境:windows7 64bit 1.python版本3.6.5,32位 2.下载Apache,版本httpd-2.4.33-o102o-x86-vc14-r2,32位,vc14编译 3.下载mod ...