2

就像标题中描述的那样,我想解压缩一个 HTTP-Resonse。这是我所做的:

  1. 接收http响应
  2. 检查内容编码(假设它的gzip)
  3. 从 http-response 中提取内容(这一点的结果是一个包含 HTTP-Message 内容的字节数组)
  4. 尝试解压缩内容字节数组

最后一点不起作用。我收到此错误:“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

这就是我的猜测,我必须做些什么来解压消息:

  1. 提取CHUNK1_DATACHUNKn_DATA(没有/cr/n和没有0,最后一个块)
  2. 连接CHUNK1_DATA...CHUNKn_DATA到一个byte-array
  3. byte-array用上面的代码解压

我真的很感激一个答案。

4

1 回答 1

0

好吧,我只是尝试过自己,它就像我在问题中描述的那样工作。如果您对我的代码感兴趣,请推荐或给我留言。

于 2012-12-18T14:00:03.777 回答