Обработка HTTP Contentencoding "Deflate"
-
30-09-2019 - |
Вопрос
какой Inputstream. Тип должен использоваться для обработки потоков URLConnection, которые имеют http Кодировка контента установлен в выпускать?
Для контента-кодирования GZIP или ZIP я использую gzipinputStream, без проблем.
Для кодирования контента «Deflate» я пытался использовать Инфицировать путать а также Deflaternputstream. Но я получаю
java.util.zip.zipException: Неизвестный метод сжатия на java.util.zip.inflaternputstream.read (inflaughtstream.java:147)
Мое понимание в том, что «деформировать» кодирование относится к Zlib сжатие, и в соответствии с документы Это должно быть обработано на блокировки.
Решение
В http / 1.1, Content-encoding: deflate
на самом деле относится к алгоритму сжатия Devlate, как определено RFC 1951., завернутый в формат данных zlib, как определено RFC 1950..
Однако некоторые поставщики просто реализуют алгоритм деформирования в качестве определенного RFC 1951, полностью игнорируя RFC 1950 (NO ZLIB заголовков).
Другие были поражены такой же проблемой:
Для того, чтобы работать вокруг этого, попробуйте создать InflaterInputStream
прохождение Inflater
это было создано с nowrap
Параметр установлен на true
:
in = new InflaterInputStream(conn.getInputStream()), new Inflater(true));
Другие советы
К сожалению, использование инфраструктурной мощности с объектом подразделения не всегда давали правильную декомпрессию. Мне пришлось обнаружить заголовки и рассказать подразделению, где было компенсирование полезной нагрузки.
http://thushw.blogspot.com/2014/05/decoding-html-pages-with-content.html.