2009-11-23 3 views
27

В пространстве имен System.Net, существует очень много различных классов с похожими названиями, такими как:. NET: WebBrowser, WebClient, WebRequest, HTTPWebRequest ... ARGH!

  • WebBrowser и WebClient
  • WebRequest и HTTPWebRequest
  • WebResponse и HttpWebResponse

Те являются главными, что мне интересно.

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

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

ответ

41

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

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

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

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

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

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

+0

Потребности ** жирный ** ... :) jk, но спасибо! –

+0

Ты на самом деле прав. Вы действительно 12? Вы пишете более четко, чем большинство людей в 3 раза старше вашего возраста! Приятно видеть молодых людей в StackOverflow. Если вы хотите быть программистом позже, вы узнаете здесь огромное количество ** хорошей ** информации. – Ash

+0

@ Аш lol о смелом, но да, мне 12 :). Спасибо! –

2

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

7

Я не знаю ни одного 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, который показывает несколько страниц на этом веб-сайте, специально предназначенных для просмотра в вашем приложении, что позволяет пользователям приобретать обновления для приложений.

0

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; 
    } 
Смежные вопросы