c#httpclient类响应未结束无法截取内容

c#httpclient类响应未结束无法截取内容

西街长安
2023-05-30 / 1 评论 / 53 阅读 / 正在检测是否收录...

C# 中的 HttpClient 类在处理流(stream)时,通常需要完整地读取整个流,而无法在流的中间截取内容。这是因为 HttpClient 是基于 HTTP 协议的客户端库,它是为了下载完整的响应内容而设计的。

如果你想在下载响应的过程中截取内容,你可以使用 HttpWebRequest 类来代替 HttpClient。HttpWebRequest 类提供了更底层的控制,允许你以流的形式逐步读取响应内容。以下是一个示例代码:

using System;
using System.IO;
using System.Net;

class Program
{
    static void Main()
    {
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://example.com");
        using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
        using (Stream responseStream = response.GetResponseStream())
        using (MemoryStream memoryStream = new MemoryStream())
        {
            byte[] buffer = new byte[4096];
            int bytesRead;
            while ((bytesRead = responseStream.Read(buffer, 0, buffer.Length)) > 0)
            {
                // 处理截取的内容
                memoryStream.Write(buffer, 0, bytesRead);
            }
            
            // 在这里可以访问 memoryStream 中的截取的内容
            byte[] content = memoryStream.ToArray();
            
            // 进行后续处理
            Console.WriteLine(content.Length);
        }
    }
}...

上面的代码使用 HttpWebRequest 发起请求并逐步读取响应的内容,将其保存在 memoryStream 中。在 memoryStream 中可以访问截取的内容并进行后续处理。

请注意,使用 HttpWebRequest 需要更多的手动处理和更底层的操作,相对于 HttpClient 而言更加复杂。因此,在许多情况下,仍建议使用 HttpClient 完整下载响应,然后在内存中截取所需内容。

2

评论 (1)

取消
  1. 头像
    Cyan-Blue Studio 作者
    Android · Google Chrome

    表情

    回复