2013-05-17 38 views
8

こんにちは仲間のJava開発者。私は以下のようにヘッダとボディとの回答を受け、私は以下のコードを使用して、それを解凍しようとすると、それはこの例外で失敗しますgzipで圧縮されたHTTP応答の解凍

 
java.io.IOException: Not in GZIP format 

応答:

 
HTTP/1.1 200 OK 
Content-Type: text/xml; charset=utf-8 
Content-Encoding: gzip 
Server: Jetty(6.1.x) 
▼  ═UMs¢0►=7┐ép?╙6-C╚$╢gΩ↓╟±╪₧∟zS╨╓╓♦$FÆ╒÷▀G┬╚╞8N≤╤Cf°►╦█╖╗o↨æJÄ+`:↓2 
♣»└√S▬L&?∙┬_)U╔|♣%ûíyk_à\,æ] hⁿ?▀xΓ∟o╜4♫ù\#MAHG?┤(Q¶╞⌡▌Ç?▼ô[7Fí¼↔φ☻I%╓╣Z♂?¿↨F;x|♦o/A╬♣╘≡∞─≤╝╘U∙♥0☺æ?|J%à{(éUmHµ %σl┴▼Ç9♣┌Ç?♫╡5╠yë~├╜♦íi♫╥╧ 
╬û?▓ε?╞┼→RtGqè₧ójWë♫╩∞j05├╞┘|>┘º∙↑j╪2┐|= ÷² 
eY\╛P?#5wÑqc╙τ♦▓½Θt£6q∩?┌4┼t♠↕=7æƒ╙?╟|♂;║)∩÷≈═^╛{v⌂┌∞◄>6ä╝| 

コード:

byte[] b= IOUtils.toByteArray(sock.getInputStream()); 

ByteArrayInputStream bais = new ByteArrayInputStream(b); 
GZIPInputStream gzis = new GZIPInputStream(bais); 
InputStreamReader reader = new InputStreamReader(gzis); 
BufferedReader in = new BufferedReader(reader); 

String readed; 
while ((readed = in.readLine()) != null) { 
    System.out.println("read: "+readed); 
} 

お助言ください。

おかげで、

プラディープ

+0

「靴下」とは何ですか?ソケットの場合は、ヘッダーやその他のものがgzipされていないことを知っておく必要があります。応答本文のみです。 –

答えて

2

は、MIMEヘッダはGZIP形式ではありません、それはプレーンテキストであります。ストリームを解凍するには、まずそれを読み取らなければなりません。このすべてのためのライブラリがあります

InputStream in = sock.getInputStream(); 
readHeader(in); 
InputStream zin = new GZIPInputStream(in); 
+0

ヘッダーを読んで何を意味するのかを教えてもらえますか?readHeader(in); ? – Bill

+1

ファイルを取得したときに、メタデータをプレーンテキストで含む「Content-type:text/html」のようなヘッダを取得することを意味します。各メタデータ要素は改行で区切られ、ヘッダ全体が2改行で終わり、データが開始されます。 http://en.wikipedia.org/wiki/MIME#MIME_headers –

0

私は第二のbmarguilesの答えです。

のみ(RFCでresponse-body)が圧縮されているので、あなただけの\r\n\r\n後にある部分を解凍する必要があります。

一般的に言えば、そのダブルCRLFで応答を半分にカットし、後半のみを圧縮解除することができます。

関連する問題