2009-03-01 5 views

Antwort

155

Sie Dateien herunterladen können mit dem WebClient class:

using System.Net; 
//... 
using (WebClient client = new WebClient()) // WebClient class inherits IDisposable 
{ 
    client.DownloadFile("http://yoursite.com/page.html", @"C:\localfile.html"); 

    // Or you can get the file content without saving it: 
    string htmlCode = client.DownloadString("http://yoursite.com/page.html"); 
    //... 
} 
+0

Hinweis: Wenn mehr Kontrolle erforderlich ist, sehen Sie sich die HttpWebRequest-Klasse an (z. B. können Sie die Authentifizierung angeben). – Richard

+1

Ja, HttpWebRequest gibt Ihnen mehr Kontrolle, obwohl Sie POST-Anfragen mit WebClient durchführen können, indem Sie client.UploadData (uriString, "POST", postParamsByteArray) verwenden; – CMS

+1

Wäre es nicht klug, WebException darum herum zu fangen? Vielleicht wurde das angenommen. Alle anderen Ausnahmen oder Fehler müssen mit dieser Methode abgefangen werden? –

33

im Grunde:

using System.Net; 
using System.Net.Http; // in LINQPad, also add a reference to System.Net.Http.dll 

WebRequest req = HttpWebRequest.Create("http://google.com"); 
req.Method = "GET"; 

string source; 
using (StreamReader reader = new StreamReader(req.GetResponse().GetResponseStream())) 
{ 
    source = reader.ReadToEnd(); 
} 

Console.WriteLine(source); 
10

"cms" Art und Weise die jüngere ist, vorgeschlagen, in ms Website

aber ich hatte ein Problem schwer zu lösen, Breite beide Methoden hier gepostet

jetzt ich post solu für alle!

Problem: , wenn Sie eine URL wie folgt verwenden: "www.somesite.it/?p=1500" in einigen Fällen erhalten Sie einen internen Serverfehler (500) obwohl in Webbrowser dieses „www. somesite.it/?p=1500 "perfekt funktionieren.

Lösung: Sie müssen Parameter ausrücken (ja ist leicht), Arbeitscode ist:

using System.Net; 
//... 
using (WebClient client = new WebClient()) 
{ 
    client.QueryString.Add("p", "1500"); //add parameters 
    string htmlCode = client.DownloadString("www.somesite.it"); 
    //... 
} 

hier offizielle Dokumentation: http://msdn.microsoft.com/en-us/library/system.net.webclient.querystring.aspx

13

Sie können es mit bekommen:

var html = new System.Net.WebClient().DownloadString(siteUrl) 
+0

Kurz und gut! Ich habe Ihren Vorschlag gefunden, nachdem ich Joe Albaharis Beispiel gelesen habe. LINQPad> Hilfe> Neue Funktionen und suchen Sie nach Cache. – Colin

+7

var html = neuer System.Net.WebClient(). DownloadString (siteUrl); // Müssen Sie Ihren Kunden neu aufbauen! – user1328350

+4

Wird der 'WebClient'' disponiert? –

4

Dieser Beitrag ist wirklich alt (es ist 7 Jahre alt, wenn ich bin (Antwort), so dass keine der anderen Lösungen den neuen und empfohlenen Weg verwendet, der HttpClient Klasse ist.

HttpClient wird neuer API betrachtet und es sollte die alten WebClient und WebRequest

string url = "page url"; 

using (HttpClient client = new HttpClient()) 
{ 
    using (HttpResponseMessage response = client.GetAsync(url).Result) 
    { 
     using (HttpContent content = response.Content) 
     { 
      string result = content.ReadAsStringAsync().Result; 
     } 
    } 
} 

Weitere Informationen zu ersetzen, wie die HttpClient Klasse zu verwenden (vor allem in Asynchron-Fällen), können Sie verweisen this question

Verwandte Themen