如何在 C# 中限制下载 HTML-document 字符串的大小?

How to limit the size of downloading string of a HTML-document in C#?

我编写了一段代码,将下载的 HTML 文档设置到变量中。但我不需要所有 HTML 文档,只需要它的前 200 个字节。当它保存文档足够时,我需要取消方法'System.Net.WebClient.DownloadString'。

try
{
    WebClient webClient = new WebClient();
    html = webClient.DownloadString("https://example.com/index.html");
} catch(Exception e) {
     MessageBox.Show(e.Message);
}

您不能使用 WebClient 读取前 N 个字符,因为它读取响应直到结束。

假设由于某种原因您不能使用 HttpClient,请特别使用 WebReposenseGetResponseStream 来阅读部分回复。

请注意,"first N bytes" != "first N chars"。您需要尝试使用适当的编码将字节转换为字符串,并且只有在转换成功时才使用字符串。

尝试给定的示例 below.It 使用更现代的 HttpClient 而不是 WebClient。我不确定它是否真的将字节数限制为 200(另请参阅 ),但您可以尝试一下。

using System.Net.Http;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp1
{
    class Program
    {
        static async Task Main()
        {
            var client = new HttpClient();
            using (var response = await client.GetAsync("https://example.com/index.html"))
            using (var stream = await response.Content.ReadAsStreamAsync())
            {
                var buffer = new byte[200];
                var count = await stream.ReadAsync(buffer, 0, buffer.Length);
                var result = Encoding.UTF8.GetString(buffer);
            }
        }
    }
}

作为一个选项:

public async Task<string> GetPartialResponseAsync(string url, int length)
{
    var request = System.Net.WebRequest.Create(url);
    request.Method = "GET";

    using (var response = await request.GetResponseAsync())
    using (var responseStream = response.GetResponseStream())
    {
        byte[] buffer = new byte[length];
        await responseStream.ReadAsync(buffer, 0, length);

        return System.Text.Encoding.Default.GetString(buffer);
    }
}