Подтвердить что ты не робот

.NET: WebBrowser, WebClient, WebRequest, HTTPWebRequest... ARGH!

В пространстве имен System.Net существует очень много разных классов с похожими именами, например:

  • WebBrowser и WebClient
  • WebRequest и HTTPWebRequest
  • WebResponse и HTTPWebResponse

Это те, которые мне интересны.

Какая каждая функция? Как они отличаются друг от друга?

Кроме того, в каких случаях вы использовали бы?

4b9b3361

Ответ 1

WebBrowser на самом деле находится в пространстве имен System.Windows.Forms и представляет собой визуальный элемент управления, который можно добавить в форму. Это прежде всего оболочка обозревателя Internet Explorer (MSHTML). Это позволяет вам легко отображать и взаимодействовать программно с веб-страницей. Вы вызываете метод Navigate, передавая веб-URL, дожидаясь его завершения загрузки и отображения, а затем взаимодействуем со страницей с помощью модели объекта, которую он предоставляет.

HttpWebRequest - это конкретный класс, который позволяет запросить в коде какой-либо файл по HTTP. Обычно вы получаете его как поток байтов. То, что вы делаете с ним после этого, зависит от вашего приложения.

HttpWebResponse позволяет обрабатывать ответ с веб-сервера, который ранее запрашивался с использованием HttpWebRequest.

WebRequest и WebResponse - это абстрактные базовые классы, наследуемые HttpWebRequest и HttpWebResponse. Вы не можете создать их напрямую. Другие классы, которые наследуют от них, включают классы Ftp и File.

WebClient. Я всегда рассматривал как хороший вспомогательный класс, который предоставляет более простые способы, например, загружать или загружать файл с веб-url. (например, методы DownloadFile и DownloadString). Я слышал, что он фактически использует HttpWebRequest/HttpWebResponse за кулисами для определенных методов.

Если вам нужен более мелкозернистый контроль над веб-запросами и ответами, вероятно, путь HttpWebRequest/HttpWebResponse. В противном случае WebClient, как правило, проще и будет выполнять эту работу.

Ответ 2

Я не знаю ни одного System.Net.WebBrowser, но WebClient - это в основном класс, который позволяет вам легко загружать файлы (включая html-страницы) из Интернета в память или даже напрямую в файл. Пример базового кода выглядит следующим образом:

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

Вы можете многое сделать с WebClient, но есть некоторые ограничения. Если вам нужно сделать некоторые серьезные веб-соскабливания, вам нужно будет получить более низкий уровень. То, в которое входит HttpWebRequest/HttpWebResponse. Вы можете использовать их для отправки любого запроса, который обычный веб-браузер может отправить в любой последовательности. Например, вам может потребоваться пройти аутентификацию с веб-сайта, прежде чем вы сможете запросить нужную вам страницу, и WebClient, возможно, не сможет этого сделать. HttpWebRequest будет.

Теперь есть еще один вариант. System.Windows.Forms.WebBrowser - это элемент управления, предназначенный для размещения на форме. Он в основном обертывает движок, используемый в Internet Explorer, чтобы предоставить все возможности веб-браузера. Вы должны быть осторожны, используя это для общего выскабливания: он не переносимый (плохой для моно), использует много ресурсов, имеет схожие проблемы безопасности с запуском полного браузера и имеет побочные эффекты, такие как потенциально протекающие всплывающие окна. Элемент управления лучше всего использовать в форме для подключения к определенному известному веб-ресурсу. Например, у вас может быть приложение Windows Forms для продажи и веб-приложение, где вы продаете его для загрузки. Вы можете предоставить элемент управления WebBrowser, который отображает несколько страниц на этом веб-сайте, специально предназначенных для просмотра в вашем приложении, что позволяет пользователям приобретать обновления для приложений.

Ответ 3

WebRequest и WebResponse являются абстрактными классами. HTTPWebRequest и HTTPWebResponse являются их реализациями.

Ответ 4

WebClient - довольно аккуратный способ получить HTML-страницу. Вот фрагмент кода для загрузки строки ответа.

   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;
    }