Bagaimana saya bisa mendownload sumber HTML di C #


109

Bagaimana saya bisa mendapatkan sumber HTML dengan alamat web di c #?

Jawaban:


185

Anda dapat mengunduh file dengan kelas 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");
}

Harus diperhatikan: jika lebih banyak kontrol diperlukan, lihat kelas HttpWebRequest (misalnya, dapat menentukan otentikasi).
Richard

1
Ya, HttpWebRequest memberi Anda kontrol lebih, meskipun Anda dapat melakukan permintaan POST dengan WebClient, menggunakan client.UploadData (uriString, "POST", postParamsByteArray);
CMS

1
Bukankah lebih bijaksana untuk menangkap WebException di sekitar ini? Mungkin itu yang diasumsikan. Ada pengecualian atau kesalahan lain yang perlu ditangkap dengan metode ini?
John Washam

4
@JohnWasham - ya, akan lebih bijaksana jika menangkap pengecualian di sini. Namun, untungnya, sebagian besar responden StackOverflow menyimpan kode contoh sejelas dan sesingkat mungkin. Membuat kode contoh lebih dekat dengan "kehidupan nyata" hanya akan menambah gangguan.
Chris Rogers

Masalah yang saya hadapi adalah ketika saya mengunduh sumber halaman dan mendapatkan data daripada jika situs web itu dalam bahasa lain selain sumber halaman saya tidak mendapatkan nilai-nilai itu
Rush. 2707

40

pada dasarnya:

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);

20

Jawaban terbaru, terbaru, up to date
Postingan ini benar-benar lama (sudah berumur 7 tahun saat saya menjawabnya), jadi tidak ada jawaban lain yang menggunakan cara baru dan yang direkomendasikan, yaitu HttpClientkelas.


HttpClientdianggap sebagai API baru dan harus menggantikan yang lama ( WebClientdan WebRequest)

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

untuk informasi selengkapnya tentang cara menggunakan HttpClientkelas (terutama dalam kasus asinkron), Anda bisa merujuk pertanyaan ini


4
Saran: tunggu metode async.
Maarten

@Maarten tautan berikut menunjukkan cara menggunakan ini dengan async / menunggu stackoverflow.com/questions/33020657/…
Hakan Fıstık

17

Anda bisa mendapatkannya dengan:

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

Pendek dan manis! Saya menemukan saran Anda setelah saya membaca contoh Joe Albahari. LINQPad> Help> What's New, dan cari Cache.
Colin

7
var html = new System.Net.WebClient (). DownloadString (siteUrl); // perlu memperbarui klien Anda!
pengguna1328350

9
Apakah itu Disposeyang WebClient?
JD

11

Cara @cms adalah yang lebih baru, disarankan di situs web MS, tetapi saya memiliki masalah yang sulit dipecahkan, dengan kedua metode yang diposting di sini, sekarang saya memposting solusi untuk semua!

masalah: jika Anda menggunakan url seperti ini: www.somesite.it/?p=1500dalam beberapa kasus Anda mendapatkan kesalahan server internal (500), meskipun di browser web ini www.somesite.it/?p=1500berfungsi dengan baik.

solusi: Anda harus memindahkan parameter, kode kerja adalah:

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

di sini dokumentasi resmi

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.