Форум » Для флейма » Борьба с gZip » Ответить

Борьба с gZip

Sadstar2016: С месяц тому назад обнаружил что моя утилита которая уже года два по расписанию периодически запускается на сервере и качает файлы из интернета - перестала получать файлы. Оказалось - изменилась структура страницы. Поправил утилиту - опять файлы стали скачиваться. С 8/03. А с 24/03 - опять облом. Оказалось что поменялась кодировка на UTF-8 и включилось сжатие gZip. HTTP/1.1 200 OK ... Content-Type: text/html; charset=UTF-8 ... Content-Encoding: gzip Connection: close Вырезал из полученных данных сжатую часть и принялся декодировать. Честный gZip обломался - "неожиданный конец файла". gZip -l ... показывает что внутри почти 500МБ файл сжат до 5000 Байт [pre2] compressed uncompressed ratio uncompressed_name 5708 436207711 100.0% txtgz.txt[/pre2] WinRar и 7Zip показываю тоже самое но молча правильно распаковывают ! Встроенный hb_Zip - не распаковал. Пришлось делать вызов внешней программы. WinRar консольный работает только с .rar . Остался 7Zip. Его и дожимал. Получилось так. [pre2]txt := oSock:Get(cPage) ... pos1:=hb_at(CRLF+CRLF, txt, 0) //конец http headers cFileGZ="html.txt.gz" //сохранить сжатую часть в виде файла memowrit( cFileGZ, substr(txt,pos1+len(CRLF+CRLF)) ) //распаковать сохраненный файл в другой файл EXECUTE FILE "7z.exe e html.txt.gz -aoa " WAIT //загрузить и перекодировать распакованный файл txt:= HB_UTF8TOSTR(memoread("html.txt"))[/pre2] И далее уже работавшая разборка html-текста в кодировке 1251. Утилита заработала. Файлы пошли. Но удовлетворения нет - не нравится мне вызов другого процесса. Нет ли чего подходящего чтобы статически примотать к харбор-екзешнику?

Ответов - 1

santy: в xHarbour в contrib есть библиотека работы с 7z (sevenzip). Можна попробовать использовать.



полная версия страницы