如何使用C#获取HTML页面源代码

10
我想通过 .htmurlurl 将完整的网页保存到本地驱动器中,但我没有成功。
public StreamReader Fn_DownloadWebPageComplete(string link_Pagesource)
{
     //--------- Download Complete ------------------
     //  using (WebClient client = new WebClient()) // WebClient class inherits IDisposable
     //   {

     //client
     //HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(link_Pagesource);

                    //webRequest.AllowAutoRedirect = true;
                    //var client1 = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(link_Pagesource);
                    //client1.CookieContainer = new System.Net.CookieContainer();


                 //   client.DownloadFile(link_Pagesource, @"D:\S1.htm");

              //  }
         //--------- Download Page Source ------------------
 HttpWebRequest URL_pageSource = (HttpWebRequest)WebRequest.Create("https://www.digikala.com");

                    URL_pageSource.Timeout = 360000;
                    //URL_pageSource.Timeout = 1000000;
                    URL_pageSource.ReadWriteTimeout = 360000;
                   // URL_pageSource.ReadWriteTimeout = 1000000;
                    URL_pageSource.AllowAutoRedirect = true;
                    URL_pageSource.MaximumAutomaticRedirections = 300;

                    using (WebResponse MyResponse_PageSource = URL_pageSource.GetResponse())
                    {

                        str_PageSource = new StreamReader(MyResponse_PageSource.GetResponseStream(), System.Text.Encoding.UTF8);
                        pagesource1 = str_PageSource.ReadToEnd();
                        success = true;
                    }

错误:

尝试了太多自动重定向。

使用此代码进行尝试但未成功。

许多URL使用此代码成功,但此URL未成功。

3个回答

20
这是方法
using System.Net.Http;

HttpClient client = new HttpClient();
string page = await client.GetStringAsync("https://www.digikala.com/");

@RedArmy 很高兴能帮到你,请考虑接受这个答案,如果它解决了你的问题。 - Hakan Fıstık
2
虽然使用.Result可以工作,但它会将异步调用转换为阻塞同步调用。最好是使用await来等待异步方法的调用(这样就不需要使用.Result),以便从异步特性中获益。 - Hans Kesting
1
@HansKesting 您是正确的,但这取决于用户本身的要求。无论如何,我正在解决我的其他扩展答案中的这个问题,我已经链接了它。您可以考虑那个扩展答案来处理大多数 HttpClient 的情况。 - Hakan Fıstık
1
很好的保存源代码解决方案,亲爱的@HakamFostok,但是这个网站使用了ajax或其他技术来展示产品,请查看URL。 - RedArmy
1
@Arya,你是正确的,这个解决方案是获取页面的HTML而不是执行页面中的javascript,这个答案并不涵盖也不应该涵盖那一点,你需要采取更多步骤并咨询更多问题才能做到。 - Hakan Fıstık
显示剩余6条评论

3
using (WebClient client = new WebClient ())
{
    client.DownloadFile("https://www.digikala.com", @"C:\localfile.html");
}

谢谢@imbot359,但是我用了这段代码,对于这个链接没有起作用。我不知道为什么。 - RedArmy

2
using (WebClient client = new WebClient ())
{
    string htmlCode = client.DownloadString("https://www.digikala.com");
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接