2009-03-01 10 views

risposta

155

È possibile scaricare file con il 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

Nota: se è necessario un maggiore controllo, consultare la classe HttpWebRequest (ad esempio essere in grado di specificare l'autenticazione). – Richard

+1

Sì, HttpWebRequest offre un maggiore controllo, sebbene sia possibile eseguire richieste POST con WebClient, utilizzando client.UploadData (uriString, "POST", postParamsByteArray); – CMS

+1

Non sarebbe prudente prendere WebException intorno a questo? Forse è stato ipotizzato. Eventuali altre eccezioni o errori devono essere catturati con questo metodo? –

33

fondamentalmente:

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

modo "CMS" è il più recente, suggerito nel sito ms

ma ho avuto un problema difficile da risolvere, larghezza entrambi i metodi pubblicati qui

ora post solu per tutti!

problema: se si utilizza un URL come questo: "www.somesite.it/?p=1500" in alcuni casi si ottiene un errore interno del server (500) anche se in questo browser web "www. somesite.it/?p=1500 "funziona perfettamente.

soluzione: si deve spostare fuori parametri (sì è facile), il codice di lavoro è:

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

qui documentazione ufficiale: http://msdn.microsoft.com/en-us/library/system.net.webclient.querystring.aspx

13

si può ottenere con:

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

Breve e dolce! Ho trovato il tuo suggerimento dopo aver letto l'esempio di Joe Albahari. LINQPad> Guida> Novità e ricerca di cache. – Colin

+7

var html = new System.Net.WebClient(). DownloadString (siteUrl); // bisogno di rinnovare il tuo cliente! – user1328350

+4

Fa 'Dispose' the' WebClient'? –

4

Questo post è molto vecchio (ho 7 anni quando sono rispondendo), quindi nessuna delle altre soluzioni ha utilizzato il metodo nuovo e consigliato, che è la classe HttpClient.

HttpClient è considerato nuove API e dovrebbe sostituire quello vecchio WebClient e 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; 
     } 
    } 
} 

per ulteriori informazioni su come utilizzare la classe HttpClient (soprattutto nei casi asincroni), è possibile fare riferimento this question