就像标题中描述的那样,我想解压缩一个 HTTP-Resonse。这是我所做的:
- 接收http响应
- 检查内容编码(假设它的gzip)
- 从 http-response 中提取内容(这一点的结果是一个包含 HTTP-Message 内容的字节数组)
- 尝试解压缩内容字节数组
最后一点不起作用。我收到此错误:“GZip 标头中的幻数不正确。请确保您传入的是 GZip 流。”
你能告诉我我做错了什么吗?
编辑:由于还没有答案,我在这里发布我的解压缩代码:
public static byte[] Decompress_GZip(byte[] gzip)
{
using (GZipStream stream = new GZipStream(new MemoryStream(gzip),
CompressionMode.Decompress))
{
byte[] buffer = new byte[size];
using (MemoryStream memory = new MemoryStream())
{
int count = 0;
do
{
count = stream.Read(buffer, 0, size);
if(count>0)
{
memory.Write(buffer, 0, count);
}
}
while (count > 0);
return memory.ToArray();
}
}
}
我还想到了什么:字节序可能有什么问题吗?也许 GZip 流无法处理网络字节顺序。
编辑:至少我注意到,这个错误只发生在接收分块消息时。让我们假设一个分块消息如下所示:
STATUS-LINE
HEADER_1 /cr/n
...
HEADER_n /cr/n
/cr/n
CHUNK1_SIZE /cr/n
CHUNK1_DATA /cr/n
...
CHUNKn_SIZE /cr/n
CHUNKn_DATA /cr/n
0 /cr/n
这就是我的猜测,我必须做些什么来解压消息:
- 提取
CHUNK1_DATA
到CHUNKn_DATA
(没有/cr/n
和没有0
,最后一个块) - 连接
CHUNK1_DATA
...CHUNKn_DATA
到一个byte-array
byte-array
用上面的代码解压
我真的很感激一个答案。