WebClient与HttpWebRequest/HttpWebResponse

Dan*_*Dan 132 .net webclient httpwebrequest httpwebresponse

在我看来,大部分可以完成的事情HttpWebRequest/Response也可以在WebClient课堂上完成.我读到的地方WebClient是一个高级包装器WebRequest/Response.
到目前为止,我无法看到任何无法实现的功能HttpWebRequest/Response,也无法看到WebClientHttpWebRequest/Response将为您提供更多"细粒度"控件.

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

如果HttpWebRequest/Response是较低级别那么WebClient,HttpWebRequest/Response我能用不能实现的目标完成WebClient什么?

Tho*_*que 86

使用可以HttpWebRequest让您更好地控制请求.您可以设置cookie,标题,协议等...在响应中,您还可以检索cookie和标题

  • @ThomasLevesque如果你继承webclient并覆盖webrequest,那么使用webclient似乎毫无意义...... (15认同)
  • 托马斯,仍然没有说服...... WebClient有一个Headers属性,你可以像这样检索cookie:String cookie = webClient.ResponseHeaders("Set-Cookie")并设置它:webClient.Headers.Add("Cookie"," CommunityServer-UserCookie ......"); (14认同)
  • 使用HttpWebRequest可以定义超时.在WebClient中,这是不可能的. (14认同)
  • @ ripper234,实际上它*是*可能的:你只需要继承WebClient并重写GetWebRequest来自定义HttpWebRequest (14认同)
  • @HagaiL,我不同意......您不必手动创建整个请求,您可以使用`base.GetWebRequest`来创建它,然后自定义您想要的内容 (5认同)
  • 所以你必须手动处理cookie ...不是很方便.我同意在大多数情况下,WebClient是可以的,并且实际上比HttpWebRequest更好,因为它使用起来更简单,但在某些情况下你最好使用HttpWebRequest (2认同)

fer*_*oze 55

HttpWebRequest 暴露了更多允许细粒度协议控制的东西,例如:是否要使用Keep-Alive,使用什么连接池,是否缓冲写入等.

WebClient不公开所有这些(虽然你可以从WebClientsublass和getaccess 子类到底层的Request对象).

WebClient(:POST/GET /表格上传EG)和不能费心去创建和管理,你只想做一个操作是为那些情况下非常有用HttpWebRequest,RequestStream,HttpWebResponse,和响应流.

  • 此外,还有一件事我忘了提及.WebClient是一个Component对象,而HttpWebRequest则不是.那是什么意思?好吧,如果您使用VisualStudio构建GUI应用程序,则可以在表单上拖放WebClient组件并使用它向HTTP/FTP等服务器发出请求. (13认同)

Ben*_*Cox 14

来自Tim Heuer的博客 - http://timheuer.com/blog/archive/2008/03/14/calling-web-services-with-silverlight-2.aspx

相反,在Silverlight中,您将需要使用WebClient或HttpWebRequest.有什么不同?这是timheuer版本.WebClient是一个更简单的实现,可以轻松地执行GET请求并获得响应流.当您需要对请求进行更细粒度的控制,需要发送标头或其他自定义时,HttpWebRequest非常适合.

  • WebClient还允许使用UploadString,UploadData和UploadFile进行POST (7认同)

小智 12

Web客户端类的用户界面线程运行,因此当数据从互联网上下载的用户界面没有响应.另一方面,HttpWebRequest类不会阻止用户界面线程,并且您的应用程序是响应式的.因此,在要从Internet下载大量数据的应用程序中,或者如果数据源访问速度很慢,则应使用HttpWebRequest类; 在所有其他情况下,您应该使用WebClient类.

  • WebClient也支持异步方法. (6认同)

Zai*_*Ali 5

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

  • 就像WebClient隐藏一些细节的所有其他示例一样,这可以通过继承WebClient并覆盖`GetWebRequest`来修复.在这种情况下,您只需[调整底层的`HttpWebRequest.AutomaticDecompressiong`属性](http://stackoverflow.com/a/4914874/48700)). (3认同)

Sam*_*Sam 5

另一个缺点WebClient是,当您使用它来获取响应文本时,它会忽略HTTP ContentTypecharset值.您必须通过Encoding属性显式设置编码.


Jul*_*der 5

"HtttpWebRequest"在.NET 4.5中已经过时了.现在,这个类只是内部的.

  • 确实.请改用"WebRequest". (2认同)
  • 该类不是过时的,构造函数是过时的。而且该类不是内部的,它仍然是公共的。 (2认同)