Come faccio a scaricare il sorgente HTML in C#

Come posso ottenere il sorgente HTML dato un indirizzo web in c#?

InformationsquelleAutor NotDan | 2009-03-01

 

5 Replies
  1. 174

    È possibile scaricare i file con l’ Classe WebClient:

    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");
    }
    • Dovrebbero nota: se più di controllo è necessario, guardare la classe HttpWebRequest (come ad esempio essere in grado di specificare l’autenticazione).
    • Sì, HttpWebRequest dà più controllo, anche se è possibile fare richieste POST con WebClient, l’utilizzo di client.UploadData(uriString,”POST”,postParamsByteArray);
    • Non sarebbe prudente per la cattura di WebException intorno a questo? Forse è stato assunto. Eccezioni o errori devono essere catturati con questo metodo?
    • sì, sarebbe prudente per intercettare le eccezioni qui. Per fortuna, tuttavia, la maggior parte StackOverflow intervistati mantenere il codice di esempio chiaro e conciso possibile. Facendo l’esempio di codice più vicino alla “vita reale” sarebbe solo aggiungere rumore.
    • Problema che mi faccia è che quando si scarica pagesource e per ottenere i dati che se il sito è in lingua diversa la mia pagesource non è ottenere quei valori
  2. 38

    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);
  3. 15

    Si può ottenere con:

    var html = new System.Net.WebClient().DownloadString(siteUrl)
    • Breve e dolce! Ho trovato il tuo suggerimento dopo che ho letto Joe Albahari esempio. LINQPad > Help > Cosa c’è di Nuovo e di ricerca per la Cache.
    • var html = nuovo Sistema.Net.WebClient().DownloadString(siteUrl); // bisogno di nuovo del tuo cliente!
    • Non che Dispose il WebClient?
  4. 12

    Questo post è molto vecchio (7 anni quando cerco di rispondere a farlo), quindi non una delle altre soluzioni nuove e consigliato, che è HttpClient classe.

    HttpClient è considerata la nuova API e dovrebbe sostituire quelli vecchi (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 il HttpClient classe (specialmente in async casi), è possibile fare riferimento questa domanda

    • Suggerimento: si attendono i metodi asincroni.
  5. 10

    @cms modo è il più recente ha suggerito nel sito MS, ma ho avuto un problema difficile da risolvere, con il metodo postato qui, ora ho posto la soluzione per tutti!!!

    problema:
    se si utilizza un url come questo: www.somesite.it/?p=1500, in qualche caso, si ottiene un errore interno del server (500),
    anche se nel browser web di questo www.somesite.it/?p=1500 funzionare perfettamente.

    soluzione:
    si hanno a muoversi al di fuori dei parametri, lavorazione del codice è:

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

    qui la documentazione ufficiale di

Lascia un commento