Как загрузить исходный код HTML на C#

Как я могу получить исходный код HTML для данного веб-адреса на C#?

Ответов (5)

Решение

Вы можете скачивать файлы с помощью класса 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");
}

по сути:

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

Вы можете получить это с помощью:

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

Способ @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");
    //...
}

здесь официальная документация

Самый новый, самый последний, актуальный ответ
Этот пост действительно старый (ему 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 класс (особенно в случаях async), вы можете обратиться к этому вопросу


ПРИМЕЧАНИЕ 1. Если вы хотите использовать async / await

string url = "page url";
HttpClient client = new HttpClient();   // actually only one object should be created by Application
using (HttpResponseMessage response = await client.GetAsync(url))
{
   using (HttpContent content = response.Content)
   {
      string result = await content.ReadAsStringAsync();
   }
}

ПРИМЕЧАНИЕ 2. При использовании функций C# 8

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