Umgang mit HTTP Contenten „entleeren“
-
30-09-2019 - |
Frage
Was Input Typ verwendet, um Griff URLConnection Ströme werden soll, die HTTP haben Content-Encoding auf deflate
Für ein Content-Encoding von gzip oder zip Ich benutze ein GZIPInputStream, kein Problem.
Für eine Content-Encoding von "entleeren" Ich habe versucht, mit InflaterInputStream und DeflaterInputStream , aber ich erhalte
java.util.zip.ZipException: unbekannt Kompressionsverfahren bei java.util.zip.InflaterInputStream.read (InflaterInputStream.java:147)
Mein Verständnis ist, dass "entleeren" Codierung bezieht sich auf Zlib Kompression und nach der
Lösung In HTTP / 1.1, bezieht sich tatsächlich auf den Jedoch einige Anbieter implementieren nur den DEFLATE Algorithmus wie definiert RFC 1951 vollständig ignoriert RFC 1950 (keine zlib-Header). Andere haben betroffen von der gleichen Ausgabe: Um dies zu umgehen, versuchen Sie die Content-encoding: deflate
DEFLATE Komprimierungsalgorithmus, wie definiert durch RFC 1951 im zlib Datenformat eingewickelt, wie definiert durch RFC 1950 . InflaterInputStream
Leiten eines Inflater
zu instanziiert, die mit dem nowrap
Parametersatz true
erstellt wurde: in = new InflaterInputStream(conn.getInputStream()), new Inflater(true));
Andere Tipps
Leider ist die InflaterInputStream mit einem Inflater-Objekt nicht produzieren immer die korrekte Dekompression. Ich musste die Header erkennen und die Inflater sagen, wo die auf die Nutzlast Offset war.
http://thushw.blogspot.com/ 2014/05 / Decodierung-html-Seiten-mit-content.html