Manipulación HTTP ContentEncoding “desinflado”
-
30-09-2019 - |
Pregunta
Lo que InputStream tipo se debe utilizar para los flujos URLConnection mango que tienen HTTP Content-Encoding en la posición desinflado
Para una Content-Encoding de gzip o zip utilizo un GZIPInputStream, no hay problema.
Para una Content-Encoding de "desinflado" He intentado usar InflaterInputStream y DeflaterInputStream pero me da
java.util.zip.ZipException: desconocido método de compresión en java.util.zip.InflaterInputStream.read (InflaterInputStream.java:147)
Mi entendimiento es que "deflate" encoding refiere a Zlib compresión, y de acuerdo con la docs esto debe ser manejado por InflaterInputStream.
Solución
En HTTP / 1.1, Content-encoding: deflate
en realidad se refiere al algoritmo de compresión deflate, como se define por RFC 1951 , envuelto en el formato de datos zlib, como se define por RFC 1950 .
Sin embargo, algunos vendedores simplemente implementan el algoritmo DESINFLE como se define RFC 1951, RFC 1950 ignorando por completo (sin cabeceras zlib).
Otros han visto afectados por el mismo problema:
A fin de evitar esto, tratar de una instancia del InflaterInputStream
pasar una Inflater
que se creó con el parámetro nowrap
conjunto a true
:
in = new InflaterInputStream(conn.getInputStream()), new Inflater(true));
Otros consejos
Por desgracia, el uso de la InflaterInputStream con un objeto Inflater no siempre produce la descompresión correcta. Tenía para detectar los encabezados y decirle al Inflater donde el desplazamiento de la carga útil era.
http://thushw.blogspot.com/ 2014/05 / decodificación-páginas HTML-con-content.html