WebClient和HttpWebRequst是用来获取数据的2种方式,一般而言,WebClient更倾向于“按需下载”,事实上掌握它也是相对容易的,而HttpWebRequst则允许你设置请求头或者对内容需要更多的控制,后者有点类似于form中的submit。
虽然两者都是异步请求事件,但是WebClient是基于事件的异步,而HttpWebRequst是基于代理的异步编程。
简单来说WebClient用于单向上传(POST)或者下载(GET),而如果你需要双向操作(POST然后再下载)则应该使用HttpWebRequest。
WebRequest:复杂,灵活性高。
可以伪装一下进行采集或者发送登录信息,安全性比WebClient低一点。
WebClient:简单,上手容易。
遇到反采集、需要登录的话就麻烦了。
WebRequest的用法:
using System;
using System.IO;
using System.Net;
using System.Text;
WebRequest request = WebRequest.Create("http://www.hnjianjie.com/");//定义下载url并创建对象
WebResponse response =request.GetResponse();//获取响应
Stream stream =response.GetResponseStream();//获得并下载数据流
StreamReader reader = newStreamReader(stream);//解码数据流
string content =reader.ReadToEnd();//获得已解码的字符串(文字流)
string url =Server.MapPath("~/") +FileName.ToString() + ".html";
using (StreamWriter sw =new StreamWriter(url, false, Encoding.UTF8))//写入至指定位置
{
sw.WriteLine(content);//写入文本流
sw.Flush();
sw.Close();
}
WebClient的用法:
using System;
using System.Net;
using System.IO;
PageUrl ="http://www.hnjianjie.com/";
WebClient wc = newWebClient(); //创建WebClient的方法
wc.Credentials =CredentialCache.DefaultCredentials;//获取系统凭据权限
Byte[] pageData =wc.DownloadData(PageUrl); //下载资源
ContentHtml.Text =Encoding.Default.GetString(pageData);//获得解码后的源码
WebClient 类:
提供向 URI 标识的资源发送数据和从 URI 标识的资源接收数据的公共方法。不能继承此类。
WebClient 类提供用于将数据发送到或从任何本地、 intranet 或通过 URI 确认的 Internet 资源接收数据的公共方法。
WebClient 类使用 WebRequest 类以提供对资源的访问。 WebClient 实例可以访问与任何数据 WebRequest 后代注册 WebRequest.RegisterPrefix 方法。
WebRequest类:
发出对统一资源标识符 (URI) 的请求。这是一个抽象(在 Visual Basic 中为 MustInherit)类。
用于从 Internet 中访问数据的.NET Framework 的请求/响应模型。
使用请求/响应模型的应用程序可以在应用程序的实例的工作一种协议不可知的方式从 Internet 请求数据 WebRequest 类时特定于协议的子代类执行请求的详细信息。
本文非原创,原文来自博客园,作者Shikyoh (侵删)