WebClient类提供向 URI 标识的资源发送数据和从 URI 标识的资源接收数据的公共方法。 其实就相当于创建一个请求客户端。可以获取网页和各种各样的信息,包括交互。

通过MSDN来看看WebClient类提供的功能。

一、属性

1、BaseAddress 获取或设置 WebClient 发出请求的基 URI。
2、CachePolicy 对于此 WebClient 实例使用 WebRequest 对象获得的任何资源,获取或设置应用程序的缓存策略。
3、CanRaiseEvents 获取一个指示组件是否可以引发事件的值。 (继承自 Component。)
4、Container 获取 IContainer,它包含 Component。 (继承自 Component。)
5、Credentials 获取或设置发送到主机并用于对请求进行身份验证的网络凭据。
6、DesignMode 获取一个值,用以指示 Component 当前是否处于设计模式。 (继承自 Component。)
7、Encoding 获取和设置用于上载和下载字符串的 Encoding。
8、Events 获取附加到此 Component 的事件处理程序的列表。 (继承自 Component。)
9、Headers 获取或设置与请求关联的标头名称/值对集合。
10、IsBusy 了解是否存在进行中的 Web 请求。
11、Proxy 获取或设置此 WebClient 对象使用的代理。
12、QueryString 获取或设置与请求关联的查询名称/值对集合。
13、ResponseHeaders 获取与响应关联的标头名称/值对集合。
14、Site 获取或设置 Component 的 ISite。 (继承自 Component。)
15、UseDefaultCredentials 获取或设置 Boolean 值,该值控制 DefaultCredentials 是否随请求一起发送。

二、方法

1、CancelAsync 取消一个挂起的异步操作。
2、CreateObjRef 创建一个对象,该对象包含生成用于与远程对象进行通信的代理所需的全部相关信息。 (继承自 MarshalByRefObject。)
3、Dispose 已重载。 
4、DownloadData 已重载。 以 Byte 数组形式通过指定的 URI 下载。
5、DownloadDataAsync 已重载。 以 Byte 数组形式下载指定的资源。这些方法不会阻止调用线程。
6、DownloadFile 已重载。 将具有指定 URI 的资源下载到本地文件。
7、DownloadFileAsync 已重载。 将指定的资源下载到本地文件。这些方法不会阻止调用线程。
8、DownloadString 已重载。 以 String 形式下载请求的资源。可以以包含 URI 的 String 或 Uri 的形式指定要下载的资源。
9、DownloadStringAsync 已重载。 下载以 String 或 Uri 形式指定的资源。这些方法不会阻止调用线程。
10、Equals 确定指定的 Object 是否等于当前的 Object。 (继承自 Object。)
11、Finalize 在通过垃圾回收将 Component 回收之前,释放非托管资源并执行其他清理操作。 (继承自 Component。)
12、GetHashCode 用作特定类型的哈希函数。 (继承自 Object。)
13、GetLifetimeService 检索控制此实例的生存期策略的当前生存期服务对象。 (继承自 MarshalByRefObject。)
14、GetService 返回一个对象,该对象表示由 Component 或它的 Container 提供的服务。 (继承自 Component。)
15、GetType 获取当前实例的 Type。 (继承自 Object。)
16、GetWebRequest 为指定资源返回一个 WebRequest 对象。
17、GetWebResponse 已重载。 返回对指定 WebRequest 的 WebResponse。
18、InitializeLifetimeService 获取控制此实例的生存期策略的生存期服务对象。 (继承自 MarshalByRefObject。)
19、MemberwiseClone 已重载。
20、OnDownloadDataCompleted 引发 DownloadDataCompleted 事件。
21、OnDownloadFileCompleted 引发 DownloadFileCompleted 事件。
22、OnDownloadProgressChanged 引发 DownloadProgressChanged 事件。
23、OnDownloadStringCompleted 引发 DownloadStringCompleted 事件。
24、OnOpenReadCompleted 引发 OpenReadCompleted 事件。
25、OnOpenWriteCompleted 引发 OpenWriteCompleted 事件。
26、OnUploadDataCompleted 引发 UploadDataCompleted 事件。
27、OnUploadFileCompleted 引发 UploadFileCompleted 事件。
28、OnUploadProgressChanged 引发 UploadProgressChanged 事件。
29、OnUploadStringCompleted 引发 UploadStringCompleted 事件。
30、OnUploadValuesCompleted 引发 UploadValuesCompleted 事件。
31、OpenRead 已重载。 为从具有指定 URI 的资源下载的数据打开一个可读的流。
32、OpenReadAsync 已重载。 打开包含指定资源的可读流。这些方法不会阻止调用线程。
33、OpenWrite 已重载。 打开一个流以将数据写入具有指定 URI 的资源。
34、OpenWriteAsync 已重载。 打开一个流以将数据写入指定的资源。这些方法不会阻止调用线程。
35、ToString 返回包含 Component 的名称的 String(如果有)。不应重写此方法。 (继承自 Component。)
36、UploadData 已重载。 将数据缓冲区上载到具有指定 URI 的资源。
37、UploadDataAsync 已重载。 将数据缓冲区上载到由 URI 标识的资源。此方法不会阻止调用线程。
38、UploadFile 已重载。 将本地文件上载到具有指定 URI 的资源。
39、UploadFileAsync 已重载。 将指定的本地文件上载到指定的资源。这些方法不会阻止调用线程。
40、UploadString 已重载。 将指定的字符串上载到指定的资源。
41、UploadStringAsync 已重载。 将指定的字符串上载到指定的资源。这些方法不会阻止调用线程。
42、UploadValues 已重载。 将名称/值集合上载到具有指定 URI 的资源。
43、UploadValuesAsync 已重载。 将指定的名称/值集合上载到指定的 URI 所标识的资源。这些方法不会阻止调用线程。

三、事件

1、Disposed 当通过调用 Dispose 方法释放组件时发生。 (继承自 Component。)
2、DownloadDataCompleted 在异步数据下载操作完成时发生。
3、DownloadFileCompleted 在异步文件下载操作完成时发生。
4、DownloadProgressChanged 在异步下载操作成功转换部分或全部数据后发生。
5、DownloadStringCompleted 在异步资源下载操作完成时发生。
6、OpenReadCompleted 在以下异步操作完成时发生,该操作打开包含某个资源的流。
7、OpenWriteCompleted 在打开流以将数据写入资源的异步操作完成时发生。
8、UploadDataCompleted 在异步数据上载操作完成时发生。
9、UploadFileCompleted 在异步文件上载操作完成时发生。
10、UploadProgressChanged 在异步上载操作成功转换部分或全部数据后发生。
11、UploadStringCompleted 在异步字符串上载操作完成时发生。
12、UploadValuesCompleted 在名称/值集合的异步上载完成时发生。

该类在小偷程序以及采集器时经常用到,以下给个比较简单的例子。

        static void Main(string[] args)
{
WebClient wc = new WebClient();
wc.BaseAddress = "http://www.juedui100.com/"; //设置根目录
wc.Encoding = Encoding.UTF8; //设置按照何种编码访问,如果不加此行,获取到的字符串中文将是乱码
string str = wc.DownloadString("/");
Console.WriteLine(str); //----------------------以下为OpenRead()以流的方式读取----------------------
wc.Headers.Add("Accept", "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*");
wc.Headers.Add("Accept-Language", "zh-cn");
wc.Headers.Add("UA-CPU", "x86");
//wc.Headers.Add("Accept-Encoding","gzip, deflate"); //因为我们的程序无法进行gzip解码所以如果这样请求获得的资源可能无法解码。当然我们可以给程序加入gzip处理的模块 那是题外话了。
wc.Headers.Add("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)");
//Headers 用于添加添加请求的头信息
System.IO.Stream objStream = wc.OpenRead("user/6974068.html"); //获取访问流
System.IO.StreamReader _read = new System.IO.StreamReader(objStream, System.Text.Encoding.UTF8); //新建一个读取流,用指定的编码读取,此处是utf-8
Console.Write(_read.ReadToEnd()); //输出读取到的字符串 //------------------------DownloadFile下载文件-------------------------------
wc.DownloadFile("http://www.baidu.com/img/shouye_b5486898c692066bd2cbaeda86d74448.gif", @"D:\123.gif"); //将远程文件保存到本地
//------------------------DownloadFile下载到字节数组-------------------------------
byte[] bytes = wc.DownloadData("http://www.baidu.com/img/shouye_b5486898c692066bd2cbaeda86d74448.gif");
FileStream fs = new FileStream(@"E:\123.gif", FileMode.Create);
fs.Write(bytes, 0, bytes.Length);
fs.Flush(); WebHeaderCollection whc = wc.ResponseHeaders; //获取响应头信息
foreach (string s in whc)
{
Console.WriteLine(s + ":" + whc.Get(s));
} Console.WriteLine(wc.QueryString.Count); //输出0 Console.ReadKey();
}

  附上一个异步下载页面的例子:

public class Program
{
static void Main(string[] args)
{
WebClient wc = new WebClient();
wc.Encoding = Encoding.UTF8; //设置按照何种编码访问,如果不加此行,获取到的字符串中文将是乱码
wc.DownloadStringCompleted += new DownloadStringCompletedEventHandler(DownComplete);
wc.DownloadStringAsync(new Uri("http://www.juedui100.com/"));
Console.WriteLine("下载!"); Console.ReadKey();
} public static void DownComplete(object sender, DownloadStringCompletedEventArgs e)
{
Console.WriteLine(sender.ToString()); //输出 System.Net.WebClient 触发事件的对象
Console.WriteLine(e.Result); //输出页面源代码
}
}

  匿名委托:

    public class Program
{
static void Main(string[] args)
{
WebClient wc = new WebClient();
wc.Encoding = Encoding.UTF8; //设置按照何种编码访问,如果不加此行,获取到的字符串中文将是乱码
wc.DownloadStringCompleted += (sender, e) =>
{
Console.WriteLine(sender.ToString()); //输出 System.Net.WebClient 触发事件的对象
Console.WriteLine(e.Result); //输出页面源代码
};
wc.DownloadStringAsync(new Uri("http://www.baidu.com/"));
Console.WriteLine("下载完成"); Console.ReadKey();
}
}

  WebClient下载文件DEMO:

public class Program
{
static void Main(string[] args)
{
WebClient wc = new WebClient();
//直接下载
wc.DownloadFile("http://24.duote.com.cn/kugou.zip", @"D:\ku.zip");
Console.WriteLine("下载完成了吗?"); //下载完成后输出 下载完成了吗? //异步下载
wc.DownloadFileAsync(new Uri("http://24.duote.com.cn/kugou.zip"), @"D:\kugou.zip");
wc.DownloadFileCompleted += DownCompletedEventHandler;
Console.WriteLine("现在完成了还是没完成呢?"); //匿名委托
wc.DownloadFileAsync(new Uri("http://24.duote.com.cn/kugou.zip"), @"D:\kugou.zip");
wc.DownloadFileCompleted += (sender, e) =>
{
Console.WriteLine("下载完成!");
Console.WriteLine(e.UserState);
Console.WriteLine(e.Cancelled);
};
Console.WriteLine("现在完成了还是没完成呢?");
Console.ReadKey();
} public static void DownCompletedEventHandler(object sender, AsyncCompletedEventArgs e)
{
Console.WriteLine("下载完成!");
Console.WriteLine(e.UserState);
Console.WriteLine(e.Cancelled);
}
}

  第二,第三个方法显示如下:

  

  将数据下载到字节数组:

        static void Main(string[] args)
{
WebClient wc = new WebClient();
//直接下载
wc.DownloadFile("http://24.duote.com.cn/kugou.zip", @"D:\ku.zip");
Console.WriteLine("下载完成了吗?"); //下载完成后输出 下载完成了吗? //将数据下载到字节数组
byte[] byteArr = wc.DownloadData("http://24.duote.com.cn/kugou.zip");
FileStream fs = new FileStream(@"D:\kugo.zip",FileMode.OpenOrCreate,FileAccess.ReadWrite);
fs.Write(byteArr,0,byteArr.Length); //至于异步与下载雷同 Console.WriteLine("现在完成了还是没完成呢?");
Console.ReadKey();
}

  WebClient的OpenRead()方法,下载成一个Stream

public class Program
{ static void Main(string[] args)
{
WebClient wc = new WebClient();

       //直接下载成Stream
//Stream stream = wc.OpenRead("http://www.baidu.com/");
//StreamReader sr = new StreamReader(stream);
//Console.WriteLine(sr.ReadToEnd()); wc.OpenReadAsync(new Uri("http://www.baidu.com"));
wc.OpenReadCompleted += (sender, e) =>
{
Console.WriteLine("下载完成!");
Console.WriteLine(e.UserState);
StreamReader sr = new StreamReader(e.Result);
Console.WriteLine(sr.ReadToEnd());
}; Console.ReadKey();
} public static void ReadCompleted(object sender, OpenReadCompletedEventArgs e)
{
Console.WriteLine("下载完成!");
Console.WriteLine(e.UserState);
StreamReader sr = new StreamReader(e.Result);
Console.WriteLine(sr.ReadToEnd());
}
}

WebClient不能处理特定于任何协议的任何特性,例如Cookie等。如果需要使用这些特性,需要使用.net中的HttpWebRequest类。

地址:http://www.cnblogs.com/kissdodog/archive/2013/02/19/2917004.html

转:WebClient类(温习一下)的更多相关文章

  1. 使用C#WebClient类访问(上传/下载/删除/列出文件目录)由IIS搭建的http文件服务器

    前言 为什么要写这边博文呢?其实,就是使用C#WebClient类访问由IIS搭建的http文件服务器的问题花了我足足两天的时间,因此,有必要写下自己所学到的,同时,也能让广大的博友学习学习一下. 本 ...

  2. 使用C#WebClient类访问(上传/下载/删除/列出文件目录)

    在使用WebClient类之前,必须先引用System.Net命名空间,文件下载.上传与删除的都是使用异步编程,也可以使用同步编程, 这里以异步编程为例: 1)文件下载: static void Ma ...

  3. WebClient类

    WebClient类提供向 URI 标识的资源发送数据和从 URI 标识的资源接收数据的公共方法. 其实就相当于创建一个请求客户端.可以获取网页和各种各样的信息,包括交互. 通过MSDN来看看WebC ...

  4. C# WebClient类上传和下载文件

    这篇文章主要介绍了C# WebClient类用法实例,本文讲解使用WebClient下载文件.OpenWriter打开一个流使用指定的方法将数据写入到uri以及上传文件示例,需要的朋友可以参考下   ...

  5. webclient类学习

    (HttpWebRequest模拟请求登录):当一些硬件设备接口 或需要调用其他地方的接口时,模拟请求登录获取接口的数据就很有必要. webclient类:只想从特定的URI请求文件,则使用WebCl ...

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

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

  7. 在WebClient类中保持Session

    string url = context.Request["url"]; WebClient MyWebClient = new WebClient(); // 获取或设置用于向I ...

  8. 使用WebClient类对网页下载源码,对文件下载保存及异步下载并报告下载进度

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAx4AAAI7CAIAAADtTtpYAAAgAElEQVR4nO3dX6xlV33Y8f3UJFUqHq

  9. 78、WebClient实现上传下载 System.Net、System.Uri类

    高层类.使用简单.均支持异步版本.支持http,https,fpt,files等URI. 一.下载 方法: Stream= client.OpenRead(serverUri): 打开一个可读的流.对 ...

随机推荐

  1. HTML 标签 参考手册

    按功能类别排列 基础 标签 描述 <!DOCTYPE>  定义文档类型. <html> 定义 HTML 文档. <title> 定义文档的标题. <body& ...

  2. zoj 3370(二分+二分图染色)

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=3912 思路:二分覆盖直径,然后判断是否有冲突(即距离小于等于直径的不 ...

  3. android classloader双亲托付模式

    概述 ClassLoader的双亲托付模式:classloader 按级别分为三个级别:最上级 : bootstrap classLoader(根类载入器) : 中间级:extension class ...

  4. Struts2_day03--从值栈获取数据_EL表达式获取值栈数据(为什么)

    从值栈获取数据 1 使用struts2的标签+ognl表达式获取值栈数据 (1)<s:property value=”ognl表达式”/> 获取字符串 1 向值栈放字符串 2 在jsp使用 ...

  5. PostgreSQL的.NET驱动程序Npgsql中参数对象的一个Bug

    最近将公司的项目从SqlServer移植到PostgreSQL数据库上来,在调用数据库的存储过程(自定义函数)的时候,发现一个奇怪的问题,老是报函数无法找到. 先看一个PgSQL存储过程: CREAT ...

  6. 第十五篇:C程序的存储空间布局

    前言 C语言程序的执行必定需要耗费一定的资源,也就是说,程序在计算机内部的映像不可能就单单代码. 本文将讲解C语言程序在计算机内部的存在方式. 程序存储空间 1. 正文段:程序的机器指令部分 2. 初 ...

  7. 修改DedeCMS图片上传路径命名规则的具体方法步骤

    收藏到:0时间:2013-08-23   文章来源:马海祥博客   访问次数:2350 最近在整理网站根目录下文件的时候,发现马海祥博客网站已经有上千个文件夹了,其中光图片文件夹就占了近一半.这个主要 ...

  8. innerHTML 延后执行?

    时常会觉得 innerHTML 可能有延后执行的情况,比如下面代码: document.body.innerHTML = 'something'; alert('something else'); 明 ...

  9. TCL电视直播软件

    升级你的电视系统我的型号46寸 V7300 3D,具体的升级程序在"技术宅"里有下载 找个格式化过的U盘把你的程序拷贝进去,插在电视上,电视会自动升级 当你成功安装V8-0MT32 ...

  10. HDU 2665 Kth number(可持续化线段树)

    Kth number Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tota ...