gpt4 book ai didi

c# - 设置 HttpWebRequest 的 AutomaticDecompression 导致响应 ContentLength 为 -1

转载 作者:塔克拉玛干 更新时间:2023-11-01 19:09:15 30 4
gpt4 key购买 nike

将 HttpWebRequest.AutomaticDecompression 设置为 gzip 后,响应的 ContentLength 属性返回 -1。 (在你说之前,是的,有响应内容!)这是一个大问题,因为我无法创建我的字节数组,其中包含我需要从响应流中读取的字节数。

我分析了 Fiddler 中的响应,ContentLength 属性是正确的,.NET 似乎不想使用它..

如果没有设置 AutomaticDecompression 属性,响应 ContentLength 会返回一个正的预期值。

我想利用内置的解压功能。知道为什么会这样吗?

我的代码:

        var request = (HttpWebRequest)WebRequest.Create(URI);
request.ReadWriteTimeout = 300000;
request.Timeout = 300000;
request.ImpersonationLevel = TokenImpersonationLevel.Anonymous;
request.Method = RequestMethod;
if (RequestDetails.GzipCompress) request.Headers.Add("Accept-Encoding", "gzip");
request.Accept = RequestDetails.Accept;
request.ContentType = RequestDetails.ContentType;
request.KeepAlive = RequestDetails.KeepAlive;
request.ServicePoint.Expect100Continue = false;
request.UserAgent = "UA";
request.CookieContainer = null;
request.Proxy = null;
request.AutomaticDecompression = DecompressionMethods.GZip;
if (RequestDetails.CustomHeaders != null) foreach (var pair in RequestDetails.CustomHeaders) request.Headers.Add(pair.Key, pair.Value);
if (RequestData != null && RequestData.Length > 0)
{
request.ContentLength = RequestData.Length;
using (var ps = request.GetRequestStream())
{
ps.Write(RequestData, 0, RequestData.Length);
}
}
HttpWebResponse response;
try { response = (HttpWebResponse)request.GetResponse(); }
catch (WebException ex) { response = (HttpWebResponse)ex.Response; }
if (!request.HaveResponse || response == null) throw new Exception("No response! The operation may have timed out.");
byte[] responseData = null;
if (response.ContentLength > 0) //-1!!!

最佳答案

已修复。必须做 response.Headers[HttpResponseHeader.ContentLength]。

请注意,这是压缩数据的大小。幸运的是,在我的例子中,我连接的服务器发回一个包含解压内容长度大小的 HTTP header 。如果你没有,我想读取所有数据的唯一方法是声明一个静态的大型缓冲区,并读取响应流,直到它返回 0 字节读取。

关于c# - 设置 HttpWebRequest 的 AutomaticDecompression 导致响应 ContentLength 为 -1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22574555/

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