gpt4 book ai didi

c# - 使用 HttpWebResponse 读取 "chunked"响应

转载 作者:可可西里 更新时间:2023-11-01 08:29:02 26 4
gpt4 key购买 nike

在使用 StreamReader 读取 HttpWebResponse 的 GetResponseStream() 返回的流时,我无法读取“分块”响应:

// response is an HttpWebResponse
StreamReader reader = new StreamReader(response.GetResponseStream());
string output = reader.ReadToEnd(); // throws exception...

reader.ReadToEnd()方法被调用我收到以下 System.IO.IOException:无法从传输连接读取数据:连接已关闭。

当服务器返回“非分块”响应时,上面的代码工作正常。

我能够让它工作的唯一方法是对初始请求使用 HTTP/1.0(而不是默认的 HTTP/1.1),但这似乎是一个蹩脚的解决方法。

有什么想法吗?


@查克

您的解决方案非常有效。它仍然在最后一个 Read() 上抛出相同的 IOExeception。但是在检查 StringBuilder 的内容之后,看起来所有数据都已收到。所以也许我只需要将 Read() 包装在 try-catch 中并吞下“错误”。

最佳答案

还没有用“分块”响应尝试过,但这样的方法行得通吗?

StringBuilder sb = new StringBuilder();
Byte[] buf = new byte[8192];
Stream resStream = response.GetResponseStream();
string tmpString = null;
int count = 0;
do
{
count = resStream.Read(buf, 0, buf.Length);
if(count != 0)
{
tmpString = Encoding.ASCII.GetString(buf, 0, count);
sb.Append(tmpString);
}
}while (count > 0);

关于c# - 使用 HttpWebResponse 读取 "chunked"响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16998/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com