解压缩http响应



大家好。我收到了如下所示的带有标题和正文的响应,但是当我尝试使用下面的代码解压它时,它失败了,出现了以下异常:

<>之前java.io.IOException: Not in GZIP format之前

反应:

<>之前Http/1.1 200 ok的content - type: text/xml;utf - 8字符集=内容编码:gzip服务器:码头(6.1.x)▼═口头语¢0►= 7┐ep ?╙6 c╚美元╢gΩ↓╟±╪₧∟z╨╓╓♦$ FÆ╒÷▀g┬╚╞8 n≤╤Cf°►╦█╖╗o↨æJA +":↓2♣»└√年代▬l ?∙┬_)U╔|♣% uiyk_a ,æ)hⁿ?▀xΓ∟o╜4♫U # MAHG ?┤(Q¶╞⌡▌C ?▼o [7 fi¼↔φ☻我%╓╣Z♂?害怕↨F; x |♦o/A╬♣╘≡∞─≤╝╘U∙♥0☺æ吗?| J % {(eUmHµl %σ┴▼C9♣┌C ?你们~♫╡5╠├╜♦ii♫╥╧╬u ?▓ε?╞┼→RtGqe₧ojWe♫╩∞j05├╞┘|>┘º∙↑j╪2┐| =÷²嗯╛P ? # 5 wnqc╙τ♦▓½Θt£6问∩?┌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);
}

请建议。

谢谢,

Pradeep

MIME报头不是GZIP格式,而是纯文本。在解压缩流之前,必须先读取它。

还有,为什么不直接用这个呢:

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

所有这些都有库。例如,您可以使用Apache HTTP组件,或者您可以阅读其开放源代码以了解它的功能。至少,阅读相关的规范。

我再看一下marguiles的回答。

只有主体 (RFC中的response-body)被压缩,所以您只需要解压rnrn之后的部分。

一般来说,您可以通过双CRLF将响应减半,并且只解压后一半。

最新更新