2015-12-21 70 views
3

我想膨胀HTML网页。我使用zlib的功能 inflateInit2(&zstream,15+32); 然后 inflate(&zstream,Z_SYNC_FLUSH);膨胀HTML gZIP内容时出现`无效距离太远'的错误

它适用于很多网页的正确,但对于“www.tabnak.ir”它不能正常工作。 invalid distance too far back是我得到这个网站的错误。 这个网页也是gzip和utf8。 我应该如何处理?

这是Bing.com的正常工作

1f 8b 08 00 ef 8c 77 56 00 ff ec 5a eb 73 9c 46 
12 ff 9e aa fc 0f 04 d5 9d ad 78 1f c0 3e b4 0b 
96 52 b2 24 2b ba 73 1c 9d 2d 27 b9 8a af b6 06 

这是tabnak.ir导致invalid distance too far back错误

1f 8b 08 00 00 00 00 00 00 03 ed fd db 73 5b d7 
99 2f 8a 3e ab ab d6 ff 30 ac ae ac d8 3b 82 80 
39 71 a7 6d 55 39 89 7b 75 f7 4a d2 7d 92 74 af 
+0

标题是[有效的gzip-deflate](http://www.ietf.org/rfc/rfc1952.txt)输出。据我所知,你得到的错误来自于你的zlib版本限制了可以查找[back-reference](https://en.wikipedia.org/wiki/DEFLATE#Duplicate_string_elimination)的距离。 – YSC

+0

我无法从这些例子中知道任何事情,这些例子太短而无法接受错误。这些示例停止在第一个动态块标题的中途。你能提供完整的流? –

回答

-2

这似乎是该文件您正试图“膨胀“(使用zlib解压缩)不是有效的zip文件。由于bing.com很可能不是zlib文件,因此您很早就发现了一些可能导致解压缩的问题。

+2

0x1f8b0800显然看起来像[gzip-deflate压缩流](http://www.ietf.org/rfc/rfc1952.txt)... – YSC

1

zlib数据/ gzip格式进行压缩说出类似“接下来的22个字节为22个字节,我们看到1013个字节前相同。

在这种情况下,描述重复的记录,是从尺寸前的“窗口”。

给你指定的窗口,可能的最大尺寸,是数据格式已经改变了一下,还是你接收到的数据是不是被送到相同。

有些事情要检查。

  1. 您正在使用最新的zlib库。
  2. 标准实用程序(例如gunzipwinzip)可以解压缩数据。
  3. 你所得到的数据不被通过文本过滤器('rb' VS 'rt'

错位如果没有帮助,试图通过数据走和理解gzip的失败是什么。