2010-12-22 16 views

Respuesta

94

Puede utilizar el WebClient

WebClient client = new WebClient(); 
string downloadString = client.DownloadString("http://www.gooogle.com"); 
+0

Desafortunadamente DownloadString (a partir de .NET 3.5) no es lo suficientemente inteligente como para trabajar con listas de materiales. He incluido una alternativa en mi respuesta. – user2246674

+12

Sin voto porque sin uso (cliente WebClient = nuevo WebClient()) {} :) –

+2

Esto es equivalente a la respuesta de Steven Spielberg, publicada 3 minutos antes, por lo que no hay +1. – BalinKingOfMoria

7
Webclient client = new Webclient(); 
string content = client.DownloadString(url); 

Pase la URL de la página que desea obtener. Puede analizar el resultado usando htmlagilitypack.

62

me he topado con problemas con Webclient.Downloadstring antes. Si lo hace, puede intentar esto:

WebRequest request = WebRequest.Create("http://www.google.com"); 
WebResponse response = request.GetResponse(); 
Stream data = response.GetResponseStream(); 
string html = String.Empty; 
using (StreamReader sr = new StreamReader(data)) 
{ 
    html = sr.ReadToEnd(); 
} 
+5

¿Puede explicar el problema que tenía? – Greg

+15

@Greg, era un problema relacionado con el rendimiento. Nunca lo resolví realmente, pero WebClient.DownloadString tardaría de 5 a 10 segundos en desplegar el HTML, mientras que WebRequest/WebResponse era casi inmediato. Solo quería proponer otra solución alternativa en caso de que el OP tuviese problemas similares o deseara un poco más de control sobre la solicitud/respuesta. – Scott

+6

@Scott - +1 para encontrar esto. Solo ejecuta algunas pruebas. DownloadString tardó mucho más tiempo en el primer uso (5299ms de cadenas de descarga frente a 200ms de WebRequest). Lo probó en un bucle de más de 50 x BBC, 50 x CNN y 50 x Otra URL de alimentación Urls, utilizando diferentes URL para evitar el almacenamiento en caché. Después de la carga inicial, DownloadString salió 20 ms más rápido para BBC, 300 ms más rápido para CNN. Para la otra fuente RSS, WebRequest fue 3 ms más rápido. En general, creo que usaré WebRequest para solteros y DownloadString para recorrer las URL. – HockeyJ

19

recomiendo no usando WebClient.DownloadString. Esto es porque (al menos en .NET 3.5) DownloadString no es lo suficientemente inteligente como para usar/eliminar la lista de materiales, en caso de que estuviera presente. Esto puede provocar que la lista de materiales () aparezca incorrectamente como parte de la cadena cuando se devuelven datos UTF-8 (al menos sin un juego de caracteres) - ick!

En cambio, esta ligera variación funcionará correctamente con listas de materiales:

string ReadTextFromUrl(string url) { 
    // WebClient is still convenient 
    // Assume UTF8, but detect BOM - could also honor response charset I suppose 
    using (var client = new WebClient()) 
    using (var stream = client.OpenRead(url)) 
    using (var textReader = new StreamReader(stream, Encoding.UTF8, true)) { 
     return textReader.ReadToEnd(); 
    } 
} 
Cuestiones relacionadas