0

我编写了一个将下载的 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);
}
4

3 回答 3

0

您无法读取前 N 个字符,WebClient因为它会读取响应直到结束。

假设由于某种原因您不能使用HttpClient,WebReposense尤其GetResponseStream是读取响应的一部分。

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

于 2019-08-05T17:31:52.817 回答
0

试试下面给出的示例。它使用更现代的 HttpClient 而不是 WebClient。我不确定它是否真的将字节数限制为 200(另请参阅如何使用 System.Net.HttpClient 检索部分响应),但您可以尝试一下。

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);
            }
        }
    }
}
于 2019-08-05T17:48:47.777 回答
0

作为一种选择:

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);
    }
}
于 2019-08-05T17:58:16.623 回答