2013-05-17 3 views
8

안녕하십니까? 나는 다음과 같이 헤더와 몸 응답을받을 수 있지만 코드 아래 사용하여 압축을 해제하려고 할 때, 그것은이 예외와 함께 실패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); 
} 

알려 주시기 바랍니다. MIME 헤더가 GZIP 형식이 아닌

감사합니다,

프라 딥

+0

'양말'이란 무엇입니까? 그것이 소켓이라면, 헤더와 다른 것들이 gzip되지 않았다는 것을 알아야합니다. 응답 본문 만 있습니다. –

답변

2

, 그것은 일반 텍스트입니다. 스트림을 압축 해제하려면 먼저 스트림을 읽어야합니다.

또한, 왜 그냥 사용하지 :

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

I 초 bmarguiles의 대답.

만합니다 (RFC에서 response-body가) 압축 몸, 당신은 단지 \r\n\r\n 이후 부분을 압축 해제 할 필요가 있도록.

일반적으로 두 배의 CRLF로 응답을 반으로 자르고 두 번째 절반 만 압축을 풀 수 있습니다.

관련 문제