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

时间:2021-10-17 03:54:13

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和带证书验证模式的更多相关文章

  1. HttpHelps类,用来实现Http访问,Post或者Get方式的,直接访问,带Cookie的,带证书的等方式,可以设置代理

    原文地址:http://blog.csdn.net/cdefg198/article/details/8315438 万能框架:http://www.sufeinet.com/forum.php?mo ...

  2. python装饰器、继承、元类、mixin,四种給类动态添加类属性和方法的方式&lpar;一&rpar;

    介绍装饰器.继承.元类.mixin,四种給类动态添加类属性和方法的方式 有时候需要給类添加额外的东西,有些东西很频繁,每个类都需要,如果不想反复的复制粘贴到每个类,可以动态添加. # coding=u ...

  3. Struts2框架&lpar;3&rpar;---Action类的3种书写方式

    Action类的3种书写方式 本文主要写有关写Action类的3种书写方式: (1)第一种 Action可以是POJO (简单模型对象)  不需要继承任何父类 也不需要实现任何接口 (2)实现Acti ...

  4. urllib2 post请求方式,带cookie,添加请求头

    #encoding = utf-8 import urllib2import urllib url = 'http://httpbin.org/post'data={"name": ...

  5. C&num;中关于增强类功能的几种方式

    C#中关于增强类功能的几种方式 本文主要讲解如何利用C#语言自身的特性来对一个类的功能进行丰富与增强,便于拓展现有项目的一些功能. 拓展方法 扩展方法被定义为静态方法,通过实例方法语法进行调用.方法的 ...

  6. C&num; 中一些类关系的判定方法 C&num;中关于增强类功能的几种方式 Asp&period;Net Core 轻松学-多线程之取消令牌

    1.  IsAssignableFrom实例方法 判断一个类或者接口是否继承自另一个指定的类或者接口. public interface IAnimal { } public interface ID ...

  7. String类对象两种实例化方式比较

    第一种:直接赋值 String str =  "hello!" ; 在java中,有一个字符串常量池,对于这种直接赋值的,会直接写进常量池(常量池里面不存在其value,) 自JD ...

  8. cc4a-c&plus;&plus;类定义与struct定义方式代码示范

    cc4a-c++类定义与struct定义方式代码示范 #include <iostream> #include <string> using namespace std; st ...

  9. 【HTTP header】【Access-Control-Allow-Credentials】跨域Ajax请求时是否带Cookie的设置

    1. 无关Cookie跨域Ajax请求 客户端 以 Jquery 的 ajax 为例: $.ajax({ url : 'http://remote.domain.com/corsrequest', d ...

随机推荐

  1. flex中通过代码获取supermap的token

    最近工作中需要使用代码来获取supermap服务启动安全访问限制以后的token值,经过一番尝试,最终成功获取到,记录下里,以供翻阅 //get token public function getTo ...

  2. java servlet&plus;mysql全过程&lpar;原创&rpar;

    前段时间写过一篇 servlet+oracle的文章,但是那是因为公司有可能接那么一个项目,然后我当时也比较闲,所以随便学了下,那玩意是白去研究了,因为公司后面并没接到那项目. 这次学servlet用 ...

  3. InnoDB&colon; Error&colon; could not open single-table tablespace file

    找到\mysql\bin下面的my.ini中mysqld项目后添加 innodb_force_recovery = 1

  4. HDU5099——Comparison of Android versions&lpar;简单题&rpar;&lpar;2014上海邀请赛重现&rpar;

    Comparison of Android versionsProblem DescriptionAs an Android developer, itˇs really not easy to fi ...

  5. 让vs2010的html编辑器验证html5语法

    或者在Tools -> option -> Text Editor -> Html -> Validation

  6. &lbrack;置顶&rsqb; perl脚本中defined&comma;exists和delete关键字的用法和区别

    刚学习perl脚本的时候,喜欢频繁使用defined关键字判断一个hash中某个key是否存在,后来程序出了问题才去perl官方文档查看关于defined关键字的准确使用方法.因此,这里我把perl中 ...

  7. C&num; - 委托的使用

    代码: using System; namespace Delegate { public class Program { //声明委托 public delegate void DelegatePa ...

  8. php回滚

    $m=D('YourModel');//或者是M();$m2=D('YouModel2');$m->startTrans();//在第一个模型里启用就可以了,或者第二个也行$result=$m- ...

  9. 泛型的 typeof

    static void Main(string[] args) { TestTypeOf<string>(); Console.ReadKey(); } static void TestT ...

  10. 计蒜客NOIP2017提高组模拟赛(五)day1-机智的 AmyZhi

    传送门 很水的题目啦QAQ #include<cstdio> #include<cstdlib> #include<algorithm> #include<c ...