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

最近把上面的方法整理了一下,给大家分享一下吧,不好的地方感谢大家留言指正,不多说了上代码吧!

/// <summary>
/// 类说明:HttpHelps教程类,用来实现Http访问,Post或者Get方式的,直接访问,带Cookie的,带证书的等方式
/// 编码日期:2011-09-13
/// 编 码 人:  苏飞
/// 联系方式:361983679  Email:sufei.1013@163.com  Blogs:http://sufei.cnblogs.com
/// </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, 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 _Method, Encoding _encoding)
    {
        RequestURl = _url;
        Method = _Method;
        encoding = _encoding;
        return GetHttpRequestData();
    }

    //下面大家自己可以多写几种常用的,呵呵

    #endregion

}

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索string
, 数据
, 对象
, 编码
, 属性
using
post cookie、httppost cookie、python post cookie、curl post cookie、jquery post cookie,以便于您获取更多的相关知识。

时间: 2024-10-20 03:28:46

HttpHelpers类普通GET和POST方式,带Cookie和带证书验证模式的相关文章

Android沉浸式状态栏微技巧(带你真正理解沉浸式模式)_Android

 其实说到沉浸式状态栏这个名字我也是感到很无奈,真不知道这种叫法是谁先发起的.因为Android官方从来没有给出过沉浸式状态栏这样的命名,只有沉浸式模式(Immersive Mode)这种说法.而有些人在没有完全了解清楚沉浸模式到底是什么东西的情况下,就张冠李戴地认为一些系统提供的状态栏操作就是沉浸式的,并且还起了一个沉浸式状态栏的名字. 比如之前就有一个QQ群友问过我,像饿了么这样的沉浸式状态栏效果该如何实现? 这个效果其实就是让背景图片可以利用系统状态栏的空间,从而能够让背景图和状态栏融为一

MVC验证10-到底用哪种方式实现客户端服务端双重异步验证

原文:MVC验证10-到底用哪种方式实现客户端服务端双重异步验证 本篇将通过一个案例来体验使用MVC的Ajax.BeginForm或jQuery来实现异步提交,并在客户端和服务端双双获得验证.希望能梳理.归纳出一个MVC异步验证的通用解决思路.本篇主要涉及: 1.通过Ajax.BeginForm()方式,返回部分视图显示验证信息.2.通过jQuery+Html.BeginForm()方式,返回部分视图显示验证信息.3.通过jquery,返回json字符串,json字符串中包含部分视图及验证信息.

Ajax跨域请求COOKIE无法带上的完美解决办法

1.原生ajax请求方式: 1 var xhr = new XMLHttpRequest(); 2 xhr.open("POST", "http://xxxx.com/demo/b/index.php", true); 3 xhr.withCredentials = true; //支持跨域发送cookies 4 xhr.send(); 2.jquery的ajax的post方法请求: $.ajax({ type: "POST", url: &qu

asp.net使用ODP即oracle连接方式的的防注入登录验证程序

 这篇文章主要介绍了asp.net使用ODP即oracle连接方式的的防注入登录验证程序,需要的朋友可以参考下 网上有很多SQL连接方式的登录验证,但没有oracle连接方式的,我摸索了一上午写了这个可执行的函数,分享给大家 代码如下: // 用户登录检查 public bool LoginCheck(string f_LoginName, string f_LoginPass) { bool result = false; // 正则表达式检查 if (Regex.IsMatch(f_Logi

python使用urllib2实现发送带cookie的请求

本文实例讲述了python使用urllib2实现发送带cookie的请求.分享给大家供大家参考.具体实现方法如下: ? 1 2 3 4 import urllib2 opener = urllib2.build_opener() opener.addheaders.append(('Cookie','cookiename=cookievalue')) f = opener.open(<A href="http://example.com/">http://example.c

Silverlight实用窍门系列:37.Silverlight和ASP.NET相互传参的两种常用方式(QueryString,Cookie)【附带实例源码】

在本节中将讲述Silverlight和ASP.NET页面的相互传参的两种常用方式:Cookie和QueryString.首先我们新建一个名为SLConnectASP.NET的Silverlight应用程序,然后在SLConnectASP.NET.web项目中添加一个Index.aspx的页面. 一.Silverlight和ASPX页面的QueryString传参 实现思路:在Silverlight端跳转到页面到Index.aspx并且传递一个QueryString参数ID,在该Index.asp

java-HttpURLConnection 带 cookie 请求 ?

问题描述 HttpURLConnection 带 cookie 请求 ? url = "http://www.baidu.com"; URL realUrl = new URL(url); HttpURLConnection conn = (HttpURLConnection)realUrl.openConnection(); String cookieval = conn.getHeaderField("set-cookie"); String sessionid

手动生成了一个带cookie的票证如何设置为滑动机制

问题描述 手动生成了一个带cookie的票证,cookie的过期时间在webconfig中已经设置好,为20分钟,滑动机制,设置代码如下<formsname="CRMlogin"path="/"loginUrl="Login.aspx"defaultUrl="Default.aspx"protection="All"timeout="20"slidingExpiration=&qu

网址带“/”与不带“/” 谈URL中末尾斜杠对SEO的影响

我们经常能看到这样的两种url 1.http://www.abc.com/abc 2.http://www.abc.com/abc/ 这两个网址到底有没区别呢?哪种对于SEO更好?这个问题困扰了我很久,因为我这个人很追求完美,这两个url虽然只有细微的差别,但是我还是想把最好的一种用于我的网站. 对于用户来说,在大多数情况下这两个网址没有任何区别,他们访问的都是网站abc目录下的默认首页.一般用户也都知道最后一个斜杠是可有可无的,他们输入网址的时候一般都只会输入http://www.abc.co