Як я можу завантажити джерело HTML у C #


109

Як я можу отримати джерело HTML із вказаною веб-адресою в c #?

Відповіді:


185

Ви можете завантажити файли з класом 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");
}

Слід зазначити: якщо потрібен більше контроль, подивіться на клас HttpWebRequest (наприклад, можливість встановити автентифікацію).
Річард

1
Так, HttpWebRequest дає вам більше контролю, хоча ви можете робити POST-запити за допомогою WebClient, використовуючи client.UploadData (uriString, "POST", postParamsByteArray);
CMS

1
Хіба не було б доцільно ловити WebException навколо цього? Можливо, це було припущено. Будь-які інші винятки чи помилки потрібно вирішити за допомогою цього методу?
Джон Вашам

4
@JohnWasham - так, тут було б доцільно ловити винятки. На щастя, більшість респондентів StackOverflow тримають приклад коду максимально чітким та стислим. Якщо наблизити приклад коду до "реального життя", це просто додасть шуму.
Кріс Роджерс

Проблема, з якою я стикаюсь, полягає в тому, що коли я завантажую сторінку-джерело і отримую дані, ніж якщо цей веб-сайт іншою мовою, ніж мої сторінки, не отримує цих значень
Rush.2707

40

в основному:

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

19

Найновіша, найновіша, найсвіжіша відповідь
Ця публікація справді стара (це 7 років, коли я відповів на неї), тому ніхто з інших відповідей не використовував новий та рекомендований спосіб, який є HttpClientкласом.


HttpClientвважається новим API і він повинен замінити старі ( WebClientі 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;
   }
}

для отримання додаткової інформації про використання HttpClientкласу (особливо у випадках асинхронізації), ви можете звернутися до цього питання


4
Пропозиція: зачекайте методів асинхронізації.
Маартен

@Maarten наступних шоу посилань , як використовувати це з асинхронним / очікування stackoverflow.com/questions/33020657 / ...
Hakan Fıstık

17

Ви можете отримати його за допомогою:

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

Коротке і солодке! Я знайшов вашу пропозицію, прочитавши приклад Джо Альбахарі. LINQPad> Довідка> Що нового та пошук кешу.
Колін

7
var html = новий System.Net.WebClient (). DownloadString (siteUrl); // Вам потрібно створити нового клієнта!
user1328350

9
Чи означає це ? DisposeWebClient
JD

11

@cms шлях - це більш свіжий, запропонований на веб-сайті MS, але у мене виникли важкі проблеми, щоб вирішити обидва способи, розміщені тут, тепер я публікую рішення для всіх!

проблема: якщо ви використовуєте такий URL-адресу: www.somesite.it/?p=1500у деяких випадках ви отримуєте внутрішню помилку сервера (500), хоча у веб-браузері це www.somesite.it/?p=1500прекрасно працює.

рішення: вам потрібно перемістити параметри, робочим кодом є:

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

тут офіційна документація

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.