1

我正在使用 HttpClient 4.1 下载网页。我想得到一个压缩版本:

    HttpGet request = new HttpGet(url);
    request.addHeader("Accept-Encoding", "gzip,deflate");

    HttpResponse response = httpClient.execute(request,localContext);
    HttpEntity entity = response.getEntity();

response.getFirstHeader("Content-Encoding")"Content-Encoding: gzip" 然而,显示entity.getContentEncoding()的是null.

如果我放:

entity = new GzipDecompressingEntity(entity);

我得到:

java.io.IOException: Not in GZIP format

看起来生成的页面是纯文本并且未压缩,即使“Content-Encoding”标头显示它是 gzip 压缩的。

我已经在几个 URL(来自不同的网站)上尝试过这个,但得到了相同的结果。

如何获得网页的压缩版本?

4

1 回答 1

1

如果您不希望您的 API 处理诸如解压缩之类的普通事情,请不要使用 HttpClient。

您可以使用基本的 URLConnection 类来获取压缩流,如以下代码所示:

public static void main(String[] args) {
    try {
        URL url = new URL("http://code.jquery.com/jquery-latest.js");
        URLConnection con = url.openConnection();
        // comment next line if you want to have something readable in your console
        con.addRequestProperty("Accept-Encoding", "gzip,deflate");
        BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
        String l;
        while ((l=in.readLine())!=null) {
            System.out.println(l);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}
于 2012-05-29T13:11:24.270 回答