2009-11-23 24 views
27

En el espacio de nombres System.Net, hay muchas clases diferentes con nombres similares, tales como:.NET: WebBrowser, WebClient, WebRequest, HTTPWebRequest ... ¡ARGH!

  • WebBrowser y WebClient
  • WebRequest y HttpWebRequest
  • WebResponse y HttpWebResponse

Aquellos son los principales sobre los que siento curiosidad.

¿Cuál es la función de cada uno? ¿Cómo son diferentes el uno del otro?

Además, ¿en qué casos usarías cuál?

Respuesta

41

WebBrowser se encuentra realmente en el espacio de nombres System.Windows.Forms y es un control visual que puede agregar a un formulario. Es principalmente un contenedor alrededor del navegador Internet Explorer (MSHTML). Le permite visualizar e interactuar fácilmente mediante programación con una página web. Llama al método Navigate para que pase una URL web, espere a que finalice la descarga y visualización y luego interactúe con la página utilizando el modelo de objetos que proporciona.

HttpWebRequest es una clase concreta que le permite solicitar en código cualquier tipo de archivo a través de HTTP. Por lo general, lo recibes como una secuencia de bytes. Lo que hagas después de eso depende de tu aplicación.

HttpWebResponse le permite procesar la respuesta de un servidor web que se solicitó anteriormente utilizando HttpWebRequest.

WebRequest y WebResponse son las clases base abstractas que el HttpWebRequest y HttpWebResponse heredan de. No puedes crear estos directamente. Otras clases que heredan de estos incluyen las clases Ftp y File.

WebClient siempre he visto como una clase de ayuda agradable que ofrece formas más simples de, por ejemplo, descargar o cargar un archivo desde una URL de la tela. (por ejemplo, métodos DownloadFile y DownloadString). He escuchado que realmente utiliza HttpWebRequest/HttpWebResponse detrás de escena para ciertos métodos.

Si necesita un control más detallado sobre las solicitudes y respuestas web, HttpWebRequest/HttpWebResponse es probablemente el camino a seguir. De lo contrario, WebClient es generalmente más simple y hará el trabajo.

+0

Necesidades ** negrita ** ... :) jk, pero gracias! –

+0

Tienes razón, hecho. ¿Eres realmente 12? ¡Escribes más claramente que la mayoría de las personas 3 veces tu edad! Es genial ver a personas más jóvenes en StackOverflow. Si quieres ser un programador más adelante, aprenderás una gran cantidad de información ** buena ** aquí. – Ash

+0

@Ash lol sobre el negrita, pero sí, tengo 12 :). ¡Gracias! –

2

WebRequest y WebResponse son clases abstractas. HTTPWebRequest y HTTPWebResponse son implementaciones de ellos.

7

No conozco ningún System.Net.WebBrowser, pero WebClient es básicamente una clase que le permite descargar fácilmente archivos (incluidas páginas html) de la web a la memoria o incluso directamente al archivo. Un ejemplo de código básico tiene este aspecto:

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

Puede hacer mucho con WebClient, pero existen algunas limitaciones. Si necesita realizar un análisis web serio, deberá obtener un nivel más bajo. Ahí es donde entran en juego HttpWebRequest/HttpWebResponse. Puede usarlos para enviar cualquier solicitud que un navegador web normal pueda enviar, en cualquier secuencia. Por ejemplo, es posible que deba autenticarse en un sitio web antes de poder solicitar la página que realmente desea, y es posible que WebClient no pueda hacerlo. HttpWebRequest lo hará.

Ahora, hay otra opción. System.Windows.Forms.WebBrowser es un control diseñado para colocar en un formulario. Básicamente, envuelve el motor utilizado en Internet Explorer para proporcionar todas las capacidades de un navegador web. Debe tener cuidado al usar esto para raspar en general: no es portátil (malo para mono), usa muchos recursos, tiene problemas de seguridad similares a los de un navegador completo y tiene efectos colaterales, como ventanas emergentes potencialmente con pérdidas. El control se utiliza mejor en una forma para conectarse a un recurso web conocido específico. Por ejemplo, puede tener una aplicación de Windows Forms para la venta, y la aplicación web donde la vende para su descarga. Puede proporcionar un control WebBrowser que muestre unas pocas páginas en este sitio web específicamente diseñadas para ver en su aplicación que permite a los usuarios comprar actualizaciones en la aplicación.

0

WebClient es una forma bastante ordenada de buscar la página HTML. Aquí está el fragmento de código para descargar una cadena de respuesta.

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