Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net WebClient与HttpWebRequest/HttpWebResponse的对比_.net_Httpwebrequest_Webclient_Httpwebresponse - Fatal编程技术网

.net WebClient与HttpWebRequest/HttpWebResponse的对比

.net WebClient与HttpWebRequest/HttpWebResponse的对比,.net,httpwebrequest,webclient,httpwebresponse,.net,Httpwebrequest,Webclient,Httpwebresponse,在我看来,通过HttpWebRequest/Response可以完成的大部分工作也可以通过WebClient类来完成。我在某处读到WebClient是WebRequest/Response的高级包装程序 到目前为止,我看不到任何可以用HttpWebRequest/Response完成的事情,也看不到任何不能用WebClient完成的事情,也看不到HttpWebRequest/Response在哪里可以给你更多的“细粒度”控制 我应该何时使用WebClient以及何时使用HttpWebReques

在我看来,通过
HttpWebRequest/Response
可以完成的大部分工作也可以通过
WebClient
类来完成。我在某处读到
WebClient
WebRequest/Response
的高级包装程序
到目前为止,我看不到任何可以用
HttpWebRequest/Response
完成的事情,也看不到任何不能用
WebClient
完成的事情,也看不到HttpWebRequest/Response在哪里可以给你更多的“细粒度”控制

我应该何时使用WebClient以及何时使用HttpWebRequest/Response?(显然,
HttpWebRequest/Response
是特定于HTTP的。)


如果
HttpWebRequest/Response
的级别低于
WebClient
,那么我可以用
HttpWebRequest/Response
完成哪些不能用
WebClient
完成的任务?

使用
HttpWebRequest
可以让您对请求进行更多的控制。您可以设置Cookie、标头、协议等。。。在响应中,您还可以从Tim Heuer的博客中检索cookie和标题


相反,在Silverlight中,您需要使用WebClient或HttpWebRequest。有什么区别?这是提摩厄版本。WebClient是一个更简单的实现,可以非常轻松地获取请求和响应流。HttpWebRequest非常适用于需要对请求进行更精细的控制、需要发送头或其他自定义设置的情况。

HttpWebRequest
公开了更多允许细粒度协议控制的内容,例如:是否要使用保持活动、使用什么连接池、是否缓冲写入、,等等

WebClient
不会公开所有这些内容(尽管您可以从
WebClient
中创建子类并获取对底层请求对象的访问)


WebClient
适用于您只想执行操作(例如:POST/GET/Form upload)而不必费心创建和管理
HttpWebRequest
RequestStream
HttpWebResponse
,和响应流。

一个例子:在一个请求/响应周期内发布数据和获取处理后的数据似乎不可能使用WebClient,但您可以使用HttpWebRequest来实现这一点。

WebClient类在用户界面线程上运行,因此从Internet下载数据时用户界面没有响应。另一方面,HttpWebRequest类不会阻止用户界面线程,并且应用程序是响应的。

因此,在需要从互联网下载大量数据的应用程序中,或者如果数据源访问速度较慢,则应使用HttpWebRequest类;在所有其他情况下,您都应该使用WebClient类。

HttpWebrquest允许您进行压缩,但Net.WebClient类不支持HTTP压缩。

WebClient的另一个缺点是,当您使用它获取响应文本时,它会忽略HTTP
ContentType
字符集
值。您必须通过
encoding
属性显式设置编码。

在.NET 4.5中,“HtttpWebRequest”已过时。现在,该类仅为内部类。

WebClient还允许POST、UploadString、UploadData和UploadFile@ThomasLevesque今天有更新版本的课程吗?我看这个讨论有点,嗯。。。年龄…@KonradViltersten,我认为WebClient类没有太大变化。对于新的应用程序,我建议您改用HttpClient,它也非常容易使用,而且更加灵活。@Thomaslevsque对,这就是我所考虑的。我回忆起http作为类名的差异,并被http误导。。。部分现在我又回到了正确的轨道上。谢谢托马斯,还是不相信。。。WebClient有一个Headers属性,您可以像这样检索cookie:String cookie=WebClient.ResponseHeaders(“设置cookie”),并将其设置为:WebClient.Headers.Add(“cookie”,“CommunityServer UserCookie…”);使用HttpWebRequest可以定义超时。在WebClient中,这是不可能的。@ripper234,实际上是可能的:您只需继承WebClient并重写GetWebRequest即可自定义HttpWebRequest@ThomasLevesque如果您继承webclient并覆盖webrequest,那么使用webclient似乎毫无意义…@HagaiL,我不同意。。。您不必手动创建整个请求,您可以使用
base.GetWebRequest
来创建它,然后定制您想要的。另外,还有一件事我忘了提到。WebClient是组件对象,而HttpWebRequest不是。这是什么意思?好的,如果您使用VisualStudio构建GUI应用程序,那么您可以在表单上拖放WebClient组件,并使用它向HTTP/FTP等服务器发出请求。只需使用WebClient.UploadString或WebClient.UploadData执行POST并返回响应字符串或字节数组。为了澄清,UploadString的返回值是一个字符串,UploadData方法的返回值是一个字节数组。WP7上的情况正好相反。HttpWebRequest被封送回Mango中的UI线程,这让我现在悲痛不已。GrrrWebClient也支持异步方法。就像所有其他WebClient隐藏某些细节的示例一样,这可以通过对WebClient进行子类化并重写
GetWebRequest
来解决。在这种情况下,你只需简单地回答即可。改为使用
WebRequest
。该类不是过时的,而是构造函数。这个类不是内部的,它仍然是公共的;而且这不仅仅是设置
编码的问题
——在请求之后才能知道编码,因此WebClient api使您不太可能正确下载未知编码的字符串。