如何限制在C#中下载HTML文档的字符串的大小



我已经编写了一个代码,该代码将下载的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);
}

尝试下面给出的示例。它使用更现代的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);
            }
        }
    }
}

您无法使用 WebClient读取n个字符,因为它读取了响应直到结束。

假设由于某种原因您无法使用HttpClient,请使用WebReposenseGetResponseStream特别读取响应的一部分。

请注意,"第一个n字节"!="第一个n个字符"。您需要尝试使用适当的编码将字节转换为字符串,并仅在转换成功时才使用字符串。

作为选项:

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

相关内容

  • 没有找到相关文章

最新更新