Entpacken Sie die GZIPed HTTP Response in Java

8

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 ();

%Vor%

Und diese, die ich in diesem Forum bekomme:

%Vor%

Ich schätze, das ist ein Codierungsfehler.

Mit freundlichen Grüßen

bill0ute

    
bill0ute 19.03.2010, 00:07
quelle

2 Antworten

9

Sie zeigen nicht, wie Sie den tBytes erhalten, mit dem Sie den gzip-Stream hier einrichten:

%Vor%

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?

    
Wim Coenen 19.03.2010, 01:01
quelle
1

Nun, da ist das Problem, das ich hier sehen kann;

%Vor%

Verwenden Sie Folgendes, um das zu beheben:

%Vor%     
Thusitha Nuwan 09.01.2014 11:05
quelle

Tags und Links