如何解压缩http响应?

时间:2009-06-30 10:42:35

标签: java

你们中任何一个人都可以解决这个问题!

问题描述:

我收到了来自http web-server的内容编码:gzip标头。 现在我想解码内容,但是当我使用jdk 1.6.12中的GZIP类时,它会给出null。

是否意味着内容不是gzip格式?或者是否有其他类用于解压缩http响应内容?

示例代码:

System.out.println("Reading InputStream");
InputStream in = httpuc.getInputStream();// httpuc is an object of httpurlconnection<br>
System.out.println("Before reading GZIP inputstream");
System.out.println(in);
GZIPInputStream gin = new GZIPInputStream(in));
System.out.println("After reading GZIP inputstream");

输出:

Reading InputStream
Before reading GZIP inputstream
sun.net.www.protocol.http.HttpURLConnection$HttpInputStream@8acf6e
null

我在代码中发现了一个错误,但无法正确理解它。它表明了什么。

错误! java.io.EOFException的

由于

3 个答案:

答案 0 :(得分:4)

我认为你应该看看HTTPClient,它将为你处理很多HTTP问题。特别是,它允许访问可能被gzip压缩的响应 body ,然后您只需通过GZIPInputStream提供它

e.g。

    Header hce = postMethod.getResponseHeader("Content-Encoding");
    InputStream in = null;
    if(null != hce)
    {
     if(hce.getValue().equals(GZIP)) {
        in = new GZIPInputStream(postMethod.getResponseBodyAsStream());
     }
         // etc...

答案 1 :(得分:1)

我是布莱恩的第二个建议。每当您需要处理通过HTTP获取/发布内容时,请不要使用Apache HTTP客户端进行低级访问。

答案 2 :(得分:1)

    InputStream is = con.getInputStream();
    InputStream bodyStream = new GZIPInputStream(is);
    ByteArrayOutputStream outStream = new ByteArrayOutputStream();
    byte[] buffer = new byte[4096];
    int length;
    while ((length = bodyStream.read(buffer)) > 0) {
        outStream.write(buffer, 0, length);
    }

    String body = new String(outStream.toByteArray(), "UTF-8");