Ошибка `недопустимое расстояние слишком далеко назад`, когда Inflate HTML-содержимое gZIP

Я хочу раздувать веб-страницы 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

3

Решение

Формат zlib / gzip выполняет сжатие, говоря что-то вроде «Следующие 22 байта совпадают с 22 байтами, которые мы видели 1013 байтов назад.

В этом случае запись, описывающая повторение, происходит до размера «окна».

Учитывая, что вы указали максимальный размер окна, вероятность того, что формат данных немного изменился, или полученные вами данные не совпадают с отправленными.

Некоторые вещи, чтобы проверить.

  1. Вы используете новейшую библиотеку zlib.
  2. Стандартные утилиты (например, gunzip, winzip) может распаковать данные.
  3. Данные, которые вы получаете, не обрабатываются текстовым фильтром ('rb' против 'rt')

Если это не помогло, попробуйте просмотреть данные и понять, что такое сбой в gzip.

1

Другие решения

Может показаться, что файл, который вы пытаетесь «накачать» (распаковать с помощью zlib), не является допустимым zip-файлом. Поскольку bing.com, скорее всего, не является файлом zlib, вполне возможно, что вы нашли что-то довольно раннее, что предотвратило распаковку.

-2