我已经编写了一个代码,该代码将下载的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
,请使用WebReposense
和GetResponseStream
特别读取响应的一部分。
请注意,"第一个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);
}
}