如何在 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
,请特别使用 WebReposense
和 GetResponseStream
来阅读部分回复。
请注意,"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);
}
}
我编写了一段代码,将下载的 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
,请特别使用 WebReposense
和 GetResponseStream
来阅读部分回复。
请注意,"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);
}
}