【问题标题】:.NET: WebBrowser, WebClient, WebRequest, HTTPWebRequest... ARGH!.NET:WebBrowser、WebClient、WebRequest、HTTPWebRequest...啊!
【发布时间】:2009-11-23 01:21:14
【问题描述】:

在 System.Net 命名空间中,有很多不同的类名称相似,例如:

  • WebBrowser 和 WebClient
  • WebRequest 和 HTTPWebRequest
  • WebResponse 和 HTTPWebResponse

这些是我主要好奇的。

每个人的功能是什么?它们之间有何不同?

另外,在什么情况下你会使用哪个?

【问题讨论】:

    标签: c# .net system.net


    【解决方案1】:

    WebBrowser 实际上位于 System.Windows.Forms 命名空间中,是一个可以添加到表单的可视控件。它主要是 Internet Explorer 浏览器 (MSHTML) 的包装器。它使您可以轻松地以编程方式显示网页并与之交互。您调用 Navigate 方法传递一个 Web URL,等待它完成下载和显示,然后使用它提供的对象模型与页面交互。

    HttpWebRequest 是一个具体的类,它允许您在代码中通过 HTTP 请求任何类型的文件。您通常以字节流的形式接收它。之后如何使用它取决于您的应用程序。

    HttpWebResponse 允许您处理来自以前使用 HttpWebRequest 请求的 Web 服务器的响应。

    WebRequestWebResponse 是 HttpWebRequest 和 HttpWebResponse 继承自的抽象基类。您不能直接创建这些。其他继承自这些的类包括 Ftp 和 File 类。

    WebClient 我一直认为它是一个很好的帮助类,它提供了更简单的方法,例如,从 Web url 下载或上传文件。 (例如 DownloadFile 和 DownloadString 方法)。我听说它实际上在幕后为某些方法使用了 HttpWebRequest / HttpWebResponse。

    如果您需要对 Web 请求和响应进行更细粒度的控制,HttpWebRequest / HttpWebResponse 可能是您的最佳选择。否则 WebClient 通常会更简单,并且会完成这项工作。

    【讨论】:

    • 你说得对,完成了。你真的是12岁吗?你写得比大多数人都清楚 3 倍于你的年龄!很高兴在 StackOverflow 上看到年轻人。如果你以后想成为一名程序员,你会在这里学到大量的信息。
    • 非常有帮助。感谢您的澄清。
    【解决方案2】:

    我不知道任何 System.Net.WebBrowser,但 WebClient 基本上是一个类,它可以让您轻松地将文件(包括 html 页面)从 Web 下载到内存中,甚至直接下载到文件中。一个基本的代码示例如下所示:

    string html;
    using (var wc = new WebClient())
    {
        html = wc.DownloadString("http://stackoverflow.com/questions/1780679/");
    }
    

    您可以使用 WebClient 做很多事情,但也有一些限制。如果您需要进行一些严重的网络抓取,则需要降低级别。这就是 HttpWebRequest/HttpWebResponse 的用武之地。您可以使用它们以任何顺序发送普通 Web 浏览器可能发送的任何请求。例如,您可能需要先对网站进行身份验证,然后才能请求您真正想要的页面,而 WebClient 可能无法做到这一点。 HttpWebRequest 会。

    现在,还有另一种选择。 System.Windows.Forms.WebBrowser 是一个控件,用于放置在窗体上。它基本上封装了 Internet Explorer 中使用的引擎,以提供 Web 浏览器的所有功能。您需要小心使用它进行一般抓取:它不可移植(对单声道不利),使用大量资源,具有与运行完整浏览器类似的安全问题,并且具有潜在的弹出窗口泄漏等副作用。该控件最好在表单中使用以连接到特定的已知 Web 资源。例如,您可能有一个要出售的 Windows 窗体应用程序,以及您出售它以供下载的 Web 应用程序。您可以提供一个 WebBrowser 控件,在该网站上显示一些页面,专门用于在您的应用中查看,从而允许用户购买应用内升级。

    【讨论】:

      【解决方案3】:

      WebRequest 和 WebResponse 是抽象类。 HTTPWebRequest 和 HTTPWebResponse 是它们的实现。

      【讨论】:

        【解决方案4】:

        WebClient 是一种非常巧妙的获取 HTML 页面的方法。 这是用于下载响应字符串的代码 sn-p。

           string getHtmlPageUsingWC(string strQuery, System.Net.WebProxy proxy = null)
            {
                string strResponse = String.Empty;
                using (WebClient wc = new WebClient())
                {
                    wc.Encoding = Encoding.UTF8;
                    IWebProxy wp = WebRequest.DefaultWebProxy;
                    wp.Credentials = CredentialCache.DefaultCredentials;
                    wc.Proxy = wp;
                    wc.Headers.Add("Accept-Language:en");
        
                    NameValueCollection nvc = new NameValueCollection();
                    nvc.Add("q", strQuery);
        
                    wc.QueryString.Add(nvc);
        
                    try
                    {
                        strResponse = wc.DownloadString(m_strURL);
                    }
                    catch (Exception ex)
                    {
                        strResponse = "Request Declined: " + ex.Message;
                        Console.WriteLine(ex.Message);
                    }
                }
        
                return strResponse;
            }
        

        【讨论】:

          猜你喜欢
          • 2023-04-04
          • 1970-01-01
          • 1970-01-01
          • 2012-01-02
          • 1970-01-01
          • 2011-05-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多