.NET中的WebClient
和HttpWebRequest
类之间有什么区别?他们都做了非常相似的事情。实际上,为什么不将它们合并为一个类(太多的方法/变量等可能是一个原因,但.NET中有其他类违反了该规则)。
感谢。
答案 0 :(得分:234)
WebClient是一种基于HttpWebRequest构建的高级抽象,可简化最常见的任务。例如,如果要从HttpWebResponse中获取内容,则必须从响应流中读取:
var http = (HttpWebRequest)WebRequest.Create("http://example.com");
var response = http.GetResponse();
var stream = response.GetResponseStream();
var sr = new StreamReader(stream);
var content = sr.ReadToEnd();
使用WebClient,您只需执行DownloadString
:
var client = new WebClient();
var content = client.DownloadString("http://example.com");
注意:为简洁起见,我省略了两个示例中的using
语句。您一定要小心处理您的Web请求对象。
通常,WebClient适用于快速和脏的简单请求,当您需要对整个请求进行更多控制时,HttpWebRequest很有用。
答案 1 :(得分:29)
WebClient也没有超时属性。这就是问题所在,因为dafault值是100秒,这太多了,无法表明是否没有互联网连接。
答案 2 :(得分:24)
我知道它的回复时间太长,但仅作为未来读者的信息目的:
<强>的WebRequest 强>
System.Object
System.MarshalByRefObject
System.Net.WebRequest
WebRequest
是一个抽象基类。所以你实际上并没有直接使用它。您可以通过它派生类使用它 - HttpWebRequest
和FileWebRequest
。
您使用WebRequest
的创建方法来创建WebRequest
的实例。 GetResponseStream
返回data stream
。
还有来自FileWebRequest
FtpWebRequest
的{{1}}和inherit
个班级。通常情况下,您可以使用WebRequest
来提出请求并将回复转换为WebRequest
,HttpWebRequest
或FileWebRequest
,具体取决于您的请求。以下是一个例子:
示例:强>
FtpWebRequest
<强> Web客户端强>
var _request = (HttpWebRequest)WebRequest.Create("http://stackverflow.com");
var _response = (HttpWebResponse)_request.GetResponse();
System.Object
System.MarshalByRefObject
System.ComponentModel.Component
System.Net.WebClient
为来自WebClient
标识的资源的sending
和receiving
数据提供常见操作。简单来说,它是URI
的更高级抽象。这种“常见操作”将HttpWebRequest
与WebClient
区分开来,如下例所示:
示例:强>
HttpWebRequest
var _client = new WebClient();
var _stackContent = _client.DownloadString("http://stackverflow.com");
个实例下还有DownloadData
和DownloadFile
个操作。这些常见操作还简化了我们通常使用WebClient
执行操作的代码。使用HttpWebRequest
,我们必须获得请求的响应,实例化HttpWebRequest
以读取响应,最后将结果转换为我们期望的任何类型。使用StreamReader
,我们只需致电WebClient
。
但请注意,DownloadData, DownloadFile or DownloadString
不会考虑您请求的资源的WebClient.DownloadString
。因此,如果您没有指定和编码,最终可能会收到奇怪的字符。
注意: 基本上&#34; WebClient 与 Webrequest &#34; 相比需要几行代码EM>