`
xu283900277xiu
  • 浏览: 38938 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类

c#访问HTTP

阅读更多
来自:http://hi.baidu.com/latte88/blog/item/d14a691bf5a5eefdae513304.html
程序介绍:一个HTTP/HTTPS进行GET/POST访问的类,并可根据GZip编码对网页进行解压。使用方法很简单,这里就不介绍了。自己看源码。

using System;
using System.IO;
using System.Net;
using System.Text;
using System.Text.RegularExpressions;
using System.Security.Cryptography.X509Certificates;
using ICSharpCode.SharpZipLib.GZip;

namespace HttpRequest
{
     /*
     * 程序设计:月亮太阳
     * E-mail:stjzp@21cn.com
     * QQ:548317
     * */

     /// <summary>
     /// HTTP/HTTPS资源的请求。
     /// </summary>
     public class HttpRequest
     {       
         // 保持Cookie为同一Cookie值。       
         protected CookieContainer craboCookie = new CookieContainer();

         protected string __Uri__                 = null;         // 标识 Internet 资源的 URI

         protected string __Referer__             = null;         // 标识 Internet 资源请求的 Referer       

         protected string __Headers__             = null;         // 标识 Internet 资源请求的 Header

         // 标识 Internet 资源请求的 Accept
         protected string __Accept__                 = "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*";

         protected string __Method__                 = null;         // 标识 Internet 资源请求的 Method

         protected string __Data__                 = null;         // POST请求时的数据

         protected string __CharacterSet__         = null;         // 响应的字符集

         protected HttpStatusCode __StatusCode__     ;         // 响应状态

         protected StringBuilder __Html_Text__     = new StringBuilder();

         public HttpRequest()
         {
             //
             // TODO: 在此处添加构造函数逻辑
             //
             __CharacterSet__ = "GB2312";
         }

         /// <summary>
         /// 对 Internet 资源发起GET请求
         /// </summary>
         /// <param name="requestUriString">标识 Internet 资源的 URI</param>
         /// <param name="requestReferer">标识 Internet 资源请求的 Referer</param>
         public bool OpenRequest(string requestUriString, string requestReferer)
         {
             __Uri__ = requestUriString;
             __Referer__ = requestReferer;
             __Method__ = "GET";
             return OpenRequest();
         }

         /// <summary>
         /// 对 Internet 资源发起GET请求
         /// </summary>
         /// <param name="requestUriString">标识 Internet 资源的 URI</param>
         /// <param name="requestReferer">标识 Internet 资源请求的 Referer</param>
         /// <param name="requestMethod">标识 Internet 资源请求的 Post 数据</param>
         public bool OpenRequest(string requestUriString, string requestReferer, string requestData)
         {
             __Uri__ = requestUriString;
             __Referer__ = requestReferer;
             __Data__ = requestData;
             __Method__ = "POST";

             return OpenRequest();
         }

         /// <summary>
         /// 对 Internet 资源发起请求
         /// </summary>
         /// <returns></returns>
         private bool OpenRequest()
         {
             // 清空已保留代码
             __Html_Text__.Remove(0, __Html_Text__.Length);

             // 创建 HttpWebRequest 实例
             HttpWebRequest Request = (HttpWebRequest)WebRequest.Create(__Uri__);

             // 设置跟随重定向
             Request.AllowAutoRedirect = true;

             #region 判断Uri资源类型
             {
                 Regex __RegexUri_ = new Regex("^https://", RegexOptions.IgnoreCase);
                 if(__RegexUri_.IsMatch(__Uri__))
                     ServicePointManager.CertificatePolicy = new TrustAllCertificatePolicy();
             }
             #endregion

             Request.Timeout = 10000;
             Request.Method = __Method__;
             Request.Accept = __Accept__;
             Request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; Maxthon; .NET CLR 1.1.4322); Http STdns";
             Request.CookieContainer = craboCookie;
             Request.Referer = __Referer__;
             Request.Method = __Method__;
             if(__Method__=="POST")
             {
                 #region 请求为POST
                 Request.ContentType = "application/x-www-form-urlencoded";
                 byte[] Bytes = Encoding.GetEncoding(CharacterSet).GetBytes(__Data__);
                 Request.ContentLength = Bytes.Length;
                 using(Stream writer = Request.GetRequestStream())
                 {
                     writer.Write(Bytes, 0, Bytes.Length);
                     writer.Close();
                 }
                 #endregion
             }

             #region 读取返回数据
             // 设置返回值变量
             bool bResult = true;
             try
             {
                 HttpWebResponse Response = (HttpWebResponse)Request.GetResponse();


                 // 获取状态值
                 __StatusCode__ = Response.StatusCode;

                 if(__StatusCode__==HttpStatusCode.OK)
                 {               
                     // 判断页面编码
                     string ContentEncoding = Response.ContentEncoding.ToLower();
                     switch(ContentEncoding)
                     {
                         case "gzip":
                             using(Stream reader = new GZipInputStream(Response.GetResponseStream()))
                             {
                                 MemoryStream ms = new MemoryStream();
                                 int nSize = 4096;
                                 byte[] writeData = new byte[nSize];
                                 while(true)
                                 {
                                     try
                                     {
                                         nSize = reader.Read(writeData, 0, nSize);
                                         if(nSize>0)
                                             ms.Write(writeData, 0, nSize);
                                         else
                                             break;
                                     }
                                     catch(GZipException)
                                     {
                                         break;
                                     }
                                 }
                                 reader.Close();
                                 __Html_Text__.Append(Encoding.GetEncoding(CharacterSet).GetString(ms.GetBuffer()));
                             }
                             break;
                         default:
                             using(Stream reader = Response.GetResponseStream())
                             {
                                 StreamReader sr = new StreamReader(reader, Encoding.GetEncoding(CharacterSet));
                                 __Html_Text__.Append(sr.ReadToEnd());
                                 sr.Close();
                                 reader.Close();
                             }
                             break;
                     }
                 }
                 else
                     bResult = false;
             }
             catch(Exception pEx)
             {
                 __Html_Text__.Append(pEx.Message);
                 return false;
             }

             #endregion

             return bResult;
         }

         /// <summary>
         /// 获取或设置 Uri 资源字符集
         /// </summary>
         public string CharacterSet
         {
             get
             {
                 return __CharacterSet__;
             }
             set
             {
                 __CharacterSet__ = value;
             }
         }

         /// <summary>
         /// 获取或设置 Uri 资源标识
         /// </summary>
         public string RequestUriString
         {
             get
             {
                 return __Uri__;
             }
             set
             {
                 __Uri__ = value;
             }
         }

         /// <summary>
         /// 获取或设置 Uri 资源请求 Accept
         /// </summary>
         public string Accept
         {
             get
             {
                 return __Accept__;
             }
             set
             {
                 __Accept__ = value;
             }
         }

         public string HtmlDocument
         {
             get
             {
                 return __Html_Text__.ToString();
             }
         }
     }

     /// <summary>
     /// 当 Uri 资源为 HTTPS 时,忽略证书。
     /// </summary>
     public class TrustAllCertificatePolicy : ICertificatePolicy
     {
         public TrustAllCertificatePolicy()
         {
             //
             // TODO: 在此处添加构造函数逻辑
             //
         }

         public bool CheckValidationResult(ServicePoint _ServicePoint_, X509Certificate _Cert_, WebRequest _WebRequest_, int _Problem_)
         {
             return true;
         }
     }
}
分享到:
评论

相关推荐

    C#WEB用户令牌TOKEN验证防止HTTPGETPOST等提交

    C# Web用户令牌(Token)验证是一种常见的方式,用于防止未经授权的HTTP请求,如GET和POST,确保数据的安全传输。本技术介绍将深入探讨如何使用C#实现令牌验证机制,并结合Nginx集群与SSL证书来增强WebAPI的安全性。...

    C#访问gsoap的webservice

    标题"**C#访问gsoap的webservice**"意味着我们要使用C#语言编写客户端代码,该代码将调用通过gSOAP编译生成的C++ Web服务接口。以下是一般步骤: 1. **生成gSOAP代码**:在服务端,使用gSOAP的wsdl2h工具从Web服务...

    C#中客户端通过http协议访问服务端

    标题“C#中客户端通过http协议访问服务端”暗示我们将讨论如何在C#客户端程序中使用HttpClient类。以下是一个简单的示例,展示了如何使用HttpClient发送GET请求到服务端,并接收返回的结果: ```csharp using ...

    C#利用post访问接口

    本篇文章将深入探讨如何使用C#进行POST方法的HTTP接口访问,这对于任何需要与远程服务器交互的应用程序都是至关重要的。POST请求常用于向服务器发送数据,如表单提交或API调用。 首先,理解HTTP协议的基础是必要的...

    C#访问domino,通过http访问Domino,C#快速访问Domino,C#集成lotus domino

    C#访问domino,通过http访问Domino,C#快速访问Domino,C#集成lotus domino 完全提供源码 界面请查阅 https://blog.csdn.net/weijia3624/article/details/113108704

    c# rest http请求类库

    在这个场景下,“c# rest http请求类库”指的是用于处理RESTful HTTP请求的工具,例如著名的第三方库RestSharp。 RestSharp是一个强大的、轻量级的C# HTTP客户端库,它提供了简单易用的API来发送RESTful请求并处理...

    C# 访问URL接口进行调用代码实例

    ### C# 访问URL接口进行调用代码实例解析 #### 概述 在现代软件开发中,HTTP请求是客户端与服务器端交互的基础之一。本文将深入探讨如何使用C#语言来实现对URL接口的访问,并通过具体示例代码来展示这一过程。此...

    C#:https访问Web服务器SSL认证项目实例

    HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全...资源主要是讲解:c#采用https访问Web服务器的编程方法,以及源代码实现Https证书认证的过程。

    自己封装的C#实现HTTP请求的动态链接库,dll

    标题中的“自己封装的C#实现HTTP请求的动态链接库,dll”指的是使用C#编程语言编写的HTTP客户端库,该库被封装成一个动态链接库(DLL)文件,供其他应用程序调用,以实现HTTP协议的网络通信功能。DLL是一种可重用的...

    C#实现HTTP代理

    在IT行业中,HTTP代理是一种网络通信机制,它允许客户端(如Web浏览器)通过另一台服务器作为中介来访问互联网上的资源。这种技术常用于提高匿名性、优化网络性能或绕过特定的网络限制。本篇文章将深入探讨如何使用...

    c#简陋版 登陆验证+http简单运用+MDI

    在描述中提到的“HTTP基本操作”是指使用C#对HTTP协议的应用。HTTP(超文本传输协议)是互联网上应用最广泛的一种网络协议,用于从万维网服务器传输超文本到本地浏览器。在C#中,可以使用`System.Net`命名空间的类来...

    C#定时刷新访问网页工具源码

    4. **网络请求**:访问网页通常需要用到HTTP协议,C#提供了`System.Net.WebClient`或`HttpClient`类来发送HTTP请求。源码中,开发者可能使用了其中一个类来发送GET请求到设定的URL,获取网页内容。 5. **异步编程**...

    windows下安装cassandra与C#访问配置

    ### Windows 下安装 Cassandra 与 C# 访问配置 #### 安装 Cassandra 在 Windows 平台上安装 Apache Cassandra 的步骤如下: 1. **下载 Cassandra** 首先访问官方站点 [http://cassandra.apache.org/]...

    c# http接口设计及调用demo

    它允许开发者创建可被HTTP客户端(如浏览器、手机应用等)访问的API。 - **控制器**:Web API的核心是控制器,它继承自`ApiController`类,负责处理HTTP请求并返回响应。 - **路由配置**:定义URL模式与控制器方法...

    c# http请求webapi接口封装类

    c# http请求webapi接口封装类

    C# OPC 转HTTP的restful访问

    标题 "C# OPC 转HTTP的restful访问" 描述了如何在C#编程环境中,利用OPC(OLE for Process Control)技术并通过RESTful API实现HTTP协议的转换与访问。OPC是一种标准接口,主要用于工业自动化设备和软件之间的数据...

    普通java访问c# webService

    本示例介绍的是如何使用Java来访问由C#编写的WebService服务。WebService是一种基于互联网的、平台无关的通信机制,它允许不同系统间的应用程序通过网络进行交互。 首先,我们需要理解WebService的基本原理。...

    C#桌面程序 winform WPF集成内置WebApi C# 创建HTTP Web API服务 完全开源一看就会

    C#桌面程序 winform WPF集成内置WebApi C# 创建HTTP Web API服务,winform WPF项目创建HTTP WEB服务,不使用IIS业务 WPF WebApi 限权限访问 在维护旧的项目时,有时需要提供APP连接的需求,就要提供HTTP服务,...

    C#源码大全 C#C#C#C#C#C#C#C#C#

    7. **操作系统交互**:C#的System.Diagnostics命名空间允许与操作系统进行交互,如Process类用于启动和管理进程,Environment类提供了系统属性访问,如操作系统版本和环境变量。 8. **网络编程**:C#的System.Net...

    用C#实现访问中维摄像机

    以上是使用C#访问中维摄像机的关键知识点。通过理解这些概念,你可以构建一个简单的应用来连接、浏览和记录来自中维摄像机的视频。然而,实际的实现将取决于中维摄像机提供的具体API和你的具体需求。记得在开发过程...

Global site tag (gtag.js) - Google Analytics