下载网页的最快 C# 代码

Fastest C# Code to Download a Web Page

提问人:Krishna Kumar 提问时间:8/25/2008 最后编辑:CommunityKrishna Kumar 更新时间:4/9/2023 访问量:78187

问:

给定一个 URL,下载该网页内容的最有效代码是什么?我只考虑 HTML,而不是相关的图像、JS 和 CSS。

c#

评论


答:

29赞 Chris 8/25/2008 #1

System.Net.WebClient

来自 MSDN:

using System;
using System.Net;
using System.IO;

public class Test
{
    public static void Main (string[] args)
    {
        if (args == null || args.Length == 0)
        {
            throw new ApplicationException ("Specify the URI of the resource to retrieve.");
        }
        WebClient client = new WebClient ();

        // Add a user agent header in case the 
        // requested URI contains a query.

        client.Headers.Add ("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)");

        Stream data = client.OpenRead (args[0]);
        StreamReader reader = new StreamReader (data);
        string s = reader.ReadToEnd ();
        Console.WriteLine (s);
        data.Close ();
        reader.Close ();
    }
}

评论

7赞 Eric J. 6/5/2012
希望 MSDN 在其示例中实际处置 IDisposable 资源。一个小异常,Stream/StreamReader 将不会被清理。 是你的朋友。using
71赞 John Sheehan 8/25/2008 #2
public static void DownloadFile(string remoteFilename, string localFilename)
{
    WebClient client = new WebClient();
    client.DownloadFile(remoteFilename, localFilename);
}

评论

9赞 SSpoke 9/30/2015
这是最慢的!,实例化一个新的 WebClient 在实际进行下载之前有 3-5 个延迟,我听说这是由于检查代理支持。我建议使用 Socket 方法进行下载,因为这是最快的解决方案
14赞 Anders Lindén 12/8/2017
我最快的解释是“使用尽可能少的代码字母”。
0赞 arturn 7/30/2020
@SSpoke 您不必在每次下载站点时都使用新实例,您可以使用 Webclient 的静态实例来避免延迟。
23赞 Adam Haile 8/25/2008 #3

使用 System.Net 中的 WebClient 类;在 .NET 2.0 及更高版本上。

WebClient Client = new WebClient ();
Client.DownloadFile("http://mysite.com/myfile.txt", " C:\myfile.txt");
8赞 EKanadily 9/1/2014 #4

这是我的答案,一个接受URL并返回字符串的方法

public static string downloadWebPage(string theURL)
    {
        //### download a web page to a string
        WebClient client = new WebClient();

        client.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)");

        Stream data = client.OpenRead(theURL);
        StreamReader reader = new StreamReader(data);
        string s = reader.ReadToEnd();
        return s;
    }

评论

1赞 AH. 4/5/2018
最佳答案。谢谢。
10赞 liang 12/19/2014 #5

WebClient.DownloadString

public static void DownloadString (string address)
{
    WebClient client = new WebClient ();
    string reply = client.DownloadString (address);

    Console.WriteLine (reply);
}
4赞 Amir Astaneh 2/3/2019 #6

我认为这是最快的(下载速度、时间、低延迟)下载解决方案。

// WebClient vs HttpClient vs HttpWebRequest vs RestSharp
// در نهایت به نظرم روش زیر سریعترین روشه
HttpWebRequest Request = (HttpWebRequest)WebRequest.Create(url);
Request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
Request.Proxy = null;
Request.Method = "GET";
using (WebResponse Response = Request.GetResponse())
{
    using (StreamReader Reader = new StreamReader(Response.GetResponseStream()))
    {
        return Reader.ReadToEnd();
    }
}
0赞 Auto 4/7/2023 #7

在这里,您有一种快速而简短的方法可以从Internet下载文件。它使用新的 HttpClient 对象,该对象是 .NET Framework 4.0+ 的新增功能,也可以与 .NET 一起使用。它还使用 aync await。

async Task<string> CurlAsync(string url) => await new HttpClient().GetStringAsync(url).ConfigureAwait(false);

// usage:

var content = await CurlAsync(myURL);

评论

3赞 Mark Rotteveel 4/8/2023
请不要只发布代码作为答案,还要解释你的代码是做什么的,以及它如何解决问题的问题。带有解释的答案通常更有帮助,质量更好,并且更有可能吸引赞成票。