Ich versuche, eine GZIPed-HTTP-Antwort mithilfe von GZIPInputStream
zu dekomprimieren. Allerdings habe ich immer dieselbe Ausnahme, wenn ich versuche, den Stream zu lesen: java.util.zip.ZipException: invalid bit length repeat
Meine HTTP-Anfrage-Kopfzeile:
%Vor% Am Ende des Headers HTTP Response erhalte ich path=/Content-Encoding: gzip
, gefolgt von der Antwort gziped.
Ich habe versucht, zwei ähnliche Codes zu entpacken:
UPDATE: In den folgenden Codes, tBytes = (the string after 'path=/Content-Encoding: gzip').getBytes ();
Und diese, die ich in diesem Forum bekomme:
%Vor%Ich schätze, das ist ein Codierungsfehler.
Mit freundlichen Grüßen
bill0ute
Sie zeigen nicht, wie Sie den tBytes
erhalten, mit dem Sie den gzip-Stream hier einrichten:
Eine Erklärung ist, dass Sie die gesamte HTTP-Antwort in tBytes
einschließen. Stattdessen sollte es nur der Inhalt nach den HTTP-Headern sein.
Eine andere Erklärung ist, dass die Antwort chunked ist.
bearbeiten : Sie nehmen die Daten nach der Inhaltscodierungszeile als Nachrichtentext. Gemäß der HTTP 1.1-Spezifikation kommen die Header-Felder jedoch nicht in einer bestimmten Reihenfolge vor, was sehr gefährlich ist.
Wie in diesem Teil der HTTP-Spezifikation erläutert, ist der Nachrichtentext einer Anfrage oder Antwort kommt nicht nach einem bestimmten Header-Feld, sondern nach der ersten leeren Zeile :
Anfrage (Abschnitt 5) und Antwort (Abschnitt 6) Nachrichten verwenden das generische Nachrichtenformat von RFC 822 [9] für übertragende Entitäten (die Nutzlast von die Nachricht). Beide Arten von Nachrichten besteht aus einer Startlinie, null oder mehr Header - Felder (auch bekannt als "Kopfzeilen"), eine leere Zeile (d. h. a Linie mit nichts vor der CRLF) zeigt das Ende der Kopfzeile an Felder und möglicherweise ein Nachrichtentext.
Sie haben immer noch nicht gezeigt, wie genau Sie tBytes
verfassen, aber zu diesem Zeitpunkt denke ich, dass Sie fälschlicherweise die leere Zeile in die Daten einschließen, die Sie dekomprimieren möchten. Der Nachrichtentext beginnt nach den CRLF-Zeichen der leeren Zeile.
Darf ich vorschlagen, dass Sie stattdessen die Bibliothek Ссылка verwenden, um den Nachrichtentext zu extrahieren?
Nun, da ist das Problem, das ich hier sehen kann;
%Vor%Verwenden Sie Folgendes, um das zu beheben:
%Vor%Tags und Links java gzip httpresponse uncompress