HttpWebRequest
这是.NET创建者最初开发用于使用HTTP请求的标准类。使用HttpWebRequest可以让开发者控制请求/响应流程的各个方面,如 timeouts, cookies, headers, protocols。另一个好处是HttpWebRequest类不会阻塞UI线程。例如,当您从响应很慢的API服务器下载大文件时,您的应用程序的UI不会停止响应。HttpWebRequest通常和WebResponse一起使用,一个发送请求,一个获取数据。HttpWebRquest更为底层一些,能够对整个访问过程有个直观的认识,但同时也更加复杂一些。以GET请求为例,至少需要五行代码才能够实现。
HttpWebRequest http = (HttpWebRequest)WebRequest.Create("http://example.com");
WebResponse response = http.GetResponse();
Stream stream = response.GetResponseStream();
using (var streamtemn = File.Create("路径"))
{
stream.CopyTo(streamtemn);
}
这种方法是早期开发者使用的方法,在当前业务中已经很少使用,由于其更加底层,需要处理一些细节,最多可用于框架内部操作。
WebClient
WebClient是一种更高级别的抽象,是HttpWebRequest为了简化最常见任务而创建的,使用过程中你会发现他缺少基本的header,timeoust的设置,不过这些可以通过继承httpwebrequest来实现。相对来说,WebClient比WebRequest更加简单,它相当于封装了request和response方法,不过需要说明的是,Webclient和WebRequest继承的是不同类,两者在继承上没有任何关系。
使用WebClient可能比HttpWebRequest直接使用更慢(大约几毫秒),但却更为简单,减少了很多细节,代码量也比较少,比如下载文件的代码,只需要两行。
using (WebClient webClient = new WebClient())
{
webClient.DownloadFile("http://example.com", "路径");
}
WebClient主要面向了WEB网页场景,在模拟Web操作时使用较为方便,但用在RestFul场景下却比较麻烦,这时候就需要HttpClient出马了。
HttpClient
目前业务上使用的比较多的是HttpClient,它适合用于多次请求操作,一般设置好默认头部后,可以进行重复多次的请求,基本上用一个实例可以提交任何的HTTP请求。此外,HttpClient提供了异步支持,可以轻松配合async await 实现异步请求。
下表是三者一些区别
| HttpWebRequset | WebClient | HttpClient | |
| 命名空间 | System.Net | System.Net | System.Net.Http |
| 继承类 | WebRequest | Component | HttpMessageInvoker |
| 支持url转向 | 是 | 否 | 是 |
| 支持cookie和session | 是 | 否 | 否 |
| 支持用户代理服务器 | 是 | 否 | 是 |
| 使用复杂度 | 高 | 低 | 低 |
参考材料:
https://stackoverflow.com/questions/22791376/is-httpwebrequest-or-webclient-faster/22792326#22792326
https://blog.youkuaiyun.com/XuWei_XuWei/article/details/18861353
https://stackoverflow.com/questions/22214930/httpclient-vs-httpwebrequest
本文对比了.NET中HttpWebRequest、WebClient和HttpClient三种HTTP请求处理方式的特点和适用场景。HttpWebRequest提供底层控制,WebClient简化常见任务,HttpClient适用于多次请求且支持异步。
3985

被折叠的 条评论
为什么被折叠?



