Mircsoft在dotnet1.1框架下提供的向 URI 标识的资源发送数据和从 URI 标识的资源接收数据的公共方法。
通过这个类,大家可以在脱离浏览器的基础上模拟浏览器对互联网上的资源的访问和发送信息。
    WebClient类不能被继承,在dotnet1.1框架中已经为我们提供了WebRequest和WebResponse两个强大的类来
处理向URI标示的资源和获取数据了。然后,不足的是利用WebRequest和WebResponse时设置过于复杂。
使用起来颇为费劲。于是乎有了现在的WebClient,WebClient其实可以理解为对WebRequest和WebResponse等
协作的封装。它使人们使用起来更加简单方便,然后它也有先天不足的地方。那就是缺少对cookies/session的
支持,用户无法对是否自动url转向的控制,还有就是缺少对代理服务器的支持。关于session/url转向控制/代理
服务器的使用我将在以后关于WebRequest/WebResponse的话题里面向大家介绍。下面先给大家简单介绍一
下WebClinet类。

类名:WebClient
  命名空间System.Net.WebClient

公共构造函数

WebClient 构造函数 初始化 WebClient 类的新实例。

公共属性

BaseAddress 获取或设置 WebClient 发出请求的基 URI。
Container(从 Component 继承) 获取 IContainer,它包含 Component
Credentials 获取或设置用于对向 Internet 资源的请求进行身份验证的网络凭据。
Headers 获取或设置与请求关联的标头名称/值对集合。
QueryString 获取或设置与请求关联的查询名称/值对集合。
ResponseHeaders 获取与响应关联的标头名称/值对集合。
Site(从 Component 继承) 获取或设置 Component 的 ISite

公共方法

CreateObjRef(从 MarshalByRefObject 继承) 创建一个对象,该对象包含生成用于与远程对象进行通讯的代理所需的全部相关信息。
Dispose(从 Component 继承) 已重载。释放由 Component 占用的资源。
DownloadData 从具有指定 URI 的资源下载数据。
DownloadFile 从具有指定 URI 的资源将数据下载到本地文件。
Equals(从 Object 继承) 已重载。确定两个 Object 实例是否相等。
GetHashCode(从 Object 继承) 用作特定类型的哈希函数,适合在哈希算法和数据结构(如哈希表)中使用。
GetLifetimeService(从 MarshalByRefObject 继承) 检索控制此实例的生存期策略的当前生存期服务对象。
GetType(从 Object 继承) 获取当前实例的 Type
InitializeLifetimeService(从 MarshalByRefObject 继承) 获取控制此实例的生存期策略的生存期服务对象。
OpenRead 为从具有指定 URI 的资源下载的数据打开一个可读的流。
OpenWrite 已重载。打开一个流以将数据写入具有指定 URI 的资源。
ToString(从 Object 继承) 返回表示当前 Object 的 String
UploadData 已重载。将数据缓冲区上载到具有指定 URI 的资源。
UploadFile 已重载。将本地文件上载到具有指定 URI 的资源。
UploadValues 已重载。将名称/值集合上载到具有指定 URI 的资源。

从上表中我们可以看到WebClient提供四种将数据上载到资源的方法:

  • OpenWrite 返回一个用于将数据发送到资源的 Stream
  • UploadData 将字节数组发送到资源并返回包含任何响应的字节数组。
  • UploadFile 将本地文件发送到资源并返回包含任何响应的字节数组。
  • UploadValues 将 NameValueCollection 发送到资源并返回包含任何响应的字节数组。

另外WebClient还提供三种从资源下载数据的方法:

下面我们将通过一个简单的应用程序来测试WebClient的最简单用法作为本小节的结束让大家对WebClient有个初步的认识
  
   例子1:利用WebClient实现对博客园首页的访问
   
    首先我们用HttpLook对这次访问进行分析,为了方便分析我特别将浏览器对图片的访问去掉 让我们能看到更简便的分析结果
    
     我们可以看到整个过程中我们发起了4次资源请求,其中第一次是对博客园首页进行访问
     第二次访问的是样式表文件,第三和四次访问的是js脚本。
     我们点击第一项可以看见关于这次资源访问的http头部信息,所谓http头部就是我们不能看见的浏览器和远程服务器传递的一些不可见元素。

Cookie: .DottextCookie=(隐藏)

这些http信息包含了浏览器访问的过程。其中
  第一行:请求地址的相对路径和使用协议 相对路径为/ 协议采用http1.1
  第二行:表示我们请求的资源种类。
  第三行:我们的语言是简体中文。
  第四行:我们使用的cup结构。这个http头在一般的网页中并不过见。估计是博客园的一次调查??
  第五行:标示采用gzip方式压缩html编码进行传递。只有一些浏览器支持的gzip解压缩时采用这种方式传递文本。由于我们
  要写的程序不具备gzi解压缩的能力 所以我们不考虑使用这种方式发送请求。
  第六行:浏览器说明
  第七行:当前主机地址
  第八行:连接请求状态
  第九行:cookies信息
 
  我在新建的应用程序里面利用WebClient来实现这了一过程。
  
  下面我将就关键实现做一些解释

            textBox1.Text=_read.ReadToEnd();

第一行:新建一个WebClient 实例_client
  第二行~第七行:将上边捕捉到的Http头部放入到_client实例,注意第六行的被注释掉了。因为我们的程序无法进行gzip解码所以如果这样请求
  获得的资源可能无法解码。当然我们可以给程序加入gzip处理的模块 那是题外话了。
  第八行:利用_client.OpenRead(string URI)的方法获取网上资源的Stream
  第九行:利用StreamReader将Stream用我们需要的编码方法去解析。这里使用了UTF8。对应不同的网站可以使用Default等不同的解码方法。
  第十行:将我们解码后的内容放到textBox1里面显示出来

好了 大致关于WebClient的介绍就到这里了。以后将为大家陆续介绍WebClient的各种属性和方法。
  利用WebClient做个资源小偷其实是很简单的,所以大家一定要防盗链阿!!!

WebClient的更多相关文章

  1. 跨域请求——WebClient通过get和post请求api

    AJAX不可以实现跨域请求,经过特殊处理才行.一般后台可以通过WebClient实现跨域请求~ //get 请求        string url = string.Format("htt ...

  2. C#通过WebClient/HttpWebRequest实现http的post/get方法

    C#通过WebClient/HttpWebRequest实现http的post/get方法 http://www.cnblogs.com/shadowtale/p/3372735.html

  3. WebClient 实现多文件/文本同时上传

    public class CreateBytes { Encoding encoding = Encoding.UTF8; /**/ /// <summary> /// 拼接所有的二进制数 ...

  4. WebClient 数据传输

    数据提交 post  ,get public string WebClientPost(string PostData, string PostUrl, string Type) { string p ...

  5. C# 文件下载 : WebClient

    最近更新了一个下载小工具,主要提升了下面几点: 1. 在一些分公司的局域网中,连接不上外网 2. 服务器上的文件更新后,下载到的还是更新前的文件 3. 没有下载进度提示 4. 不能终止下载 下面和大家 ...

  6. C# 发送Http请求 - WebClient类

    WebClient位于System.Net命名空间下,通过这个类可以方便的创建Http请求并获取返回内容. 一.用法1 - DownloadData string uri = "http:/ ...

  7. c# WebClient Get Post 方法

    public string GetData(string url) { string data; using (var client = new WebClient()) { using (var s ...

  8. c# WebClient文件下载

    public void HttpDownload(string url, string path, ResourceType type) { using (var client = new WebCl ...

  9. [解决WebClient或HttpWebRequest首次连接缓慢问题]

    [编程环境]Visual Studio 2010, NET4.0 [开发语言]C#, 理论上VB.NET等依赖.NET Framework框架的语言均受此影响 [问题描述] 使用HttpWebRequ ...

  10. winform客户端利用webClient实现与Web服务端的数据传输

    由于项目需要,最近研究了下WebClient的数据传输.关于WebClient介绍网上有很多详细介绍,大概就是利用WebClient可以实现对Internet资源的访问.无外乎客户端发送请求,服务端处 ...

随机推荐

  1. .NET DLL 保护措施详解(四)各操作系统运行情况

    我准备了WEB应用程序及WinForm应用程序,分别在WIN SERVER 2012/2008/2003.Win7/10上实测,以下为实测结果截图: 2012 2008 2003 WIN7 WIN10 ...

  2. Sql Server中的分组

    1.Group by可以将相同的数据合并为一组,分组后的数据可以看成是一个临时的表,注意如果sql中有where条件,那么group by必须放在where之后. 2.GROUP BY子句中可以指定多 ...

  3. Programmer's Jokes

    1.   一天, 下着小雨, 和同事们一起去上班,一位同事差点滑倒,另一位同事笑话说:如果人走路用爬的就不会摔倒了!   遂反问他:能用两行代码搞定的事情为什么要用4行呢? 2.  有趣的公式( Fr ...

  4. 虚拟机中Linux安装Tools

    1. 插入光盘后将文件拷贝到常用放置软件的目录 2. 解压文件 3. 然后进入解压后的文件夹里找到安装文件进行安装(注意使用root权限安装) 4. 安装时也是一个交互的过程 5. 完成安装

  5. ArcGIS 坐标系统文件

    坐标是GIS数据的骨骼框架,能够将我们的数据定位到相应的位置,为地图中的每一点提供准确的坐标. ArcGIS自带了多种坐标系统,在${ArcGISHome}Coordinate Systems目录下可 ...

  6. C语言实现基于投票规则的细胞自动机

    算法介绍 首先我们先看一下“基于投票规则的细胞自动机”的定义: 基于投票规则的细胞自动机,实际上是具有如下限定条件的一种细胞自动机: 状态:0或1: 邻居:中心的3*3邻居: 规则:计数p表示中心的3 ...

  7. const关键字在C和C++区别

    1)C++默认为内部链接:C默认为外部链接2)在C++中,一般一个const不会创建内存空间,而是将其保存在符号表(待看).比如: ; char buf[bufsize]; 这里无需为const创建内 ...

  8. 在Windows Phone中使用HTML编程

    在开发Windows Phone的项目中,需求中有几个页面是要用表格来布局的(效果图如下),由于Grid中有的边线是虚的,而且没有边线,果断放弃了,用了border将表格的线加上去了.于是在有表格布局 ...

  9. android SDK启动的错误

    1. AVD Manager.exe : failed to execute tools android.bat 请把AVD Manager.exe复制到跟 SDK Manager.exe的相同目录下 ...

  10. 【Qt】Qt Assistant介绍【转】

    简介 Qt Assistant也就是我们常说的Qt助手,是一款用于呈现在线文档的工具. 简介 一分钟学会使用 Qt参考文档 Qt Assistant详解 命令行选项 工具窗口 文档窗口 工具栏 菜单 ...