【问题标题】:Error `invalid distance too far back` when Inflate HTML gZIP content膨胀 HTML gZIP 内容时出现错误“无效距离太远”
【发布时间】:2015-12-21 13:14:20
【问题描述】:

我想给 HTML 网页充气。我正在使用 zlib 函数 inflateInit2(&zstream,15+32); 进而 inflate(&zstream,Z_SYNC_FLUSH);

它适用于许多网页,但对于“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 

【问题讨论】:

  • 标头是valid gzip-deflate 输出。据我所知,您得到的错误来自您的 zlib 版本限制了可以查找 back-reference 的距离。
  • 我无法从这些示例中看出任何内容,这些示例太短而无法解决错误。示例在第一个动态块头中途停止。你能提供完整的流吗?

标签: c++ c zlib inflate


【解决方案1】:

zlib/gzip 格式执行压缩时会说“接下来的 22 个字节与我们在 1013 个字节之前看到的 22 个字节相同。

在这种情况下,描述重复的记录来自“窗口”大小之前。

鉴于您已经指定了最大窗口大小,很可能是数据格式发生了一些变化,或者您收到的数据与发送的数据不同。

需要检查的一些事项。

  1. 您使用的是最新的 zlib 库。
  2. 标准实用程序(例如gunzipwinzip)可以解压缩数据。
  3. 您获取的数据没有被文本过滤器破坏('rb' vs 'rt'

如果这没有帮助,请尝试遍历数据并了解 gzip 中的故障所在。

【讨论】:

    【解决方案2】:

    您尝试“膨胀”(使用 zlib 解压缩)的文件似乎不是有效的 zip 文件。由于 bing.com 很可能不是 zlib 文件,因此您很早就发现了阻止解压缩的东西可能纯属巧合。

    【讨论】:

    猜你喜欢
    • 2017-03-31
    • 1970-01-01
    • 1970-01-01
    • 2014-10-22
    • 1970-01-01
    • 2016-09-20
    • 2016-07-02
    • 2016-12-18
    • 1970-01-01
    相关资源
    最近更新 更多