如何与内容编码读取压缩HTML页面:gzip的(How to read compressed HTM

2019-09-18 06:10发布

我要求一个网页,发送内容编码:gzip头,但卡住了怎么读呢..

我的代码:

    try {
        URLConnection connection = new URL("http://jquery.org").openConnection();                        
        String html = "";
        BufferedReader in = null;
        connection.setReadTimeout(10000);
    in = new BufferedReader(new InputStreamReader(connection.getInputStream()));            
    String inputLine;
    while ((inputLine = in.readLine()) != null){
    html+=inputLine+"\n";
        }
    in.close();
        System.out.println(html);
        System.exit(0);
    } catch (IOException ex) {
        Logger.getLogger(Crawler.class.getName()).log(Level.SEVERE, null, ex);
    }

输出看起来很凌乱。(我无法粘贴到此处,一种符号。)

我相信这是一个压缩的内容,如何解析呢?

注意:
如果我改变jquery.org到jquery.com(不发送头,我的代码效果很好)

Answer 1:

有此一类: GZIPInputStream 。 这是一个InputStream ,所以是非常透明使用。



Answer 2:

其实,这是pb2q的答案,但我张贴的未来读者的完整代码

try {
    URLConnection connection = new URL("http://jquery.org").openConnection();                        
    String html = "";
    BufferedReader in = null;
    connection.setReadTimeout(10000);
    //The changed part
    if (connection.getHeaderField("Content-Encoding")!=null && connection.getHeaderField("Content-Encoding").equals("gzip")){
        in = new BufferedReader(new InputStreamReader(new GZIPInputStream(connection.getInputStream())));            
    } else {
        in = new BufferedReader(new InputStreamReader(connection.getInputStream()));            
    }     
    //End        
    String inputLine;
    while ((inputLine = in.readLine()) != null){
    html+=inputLine+"\n";
    }
in.close();
    System.out.println(html);
    System.exit(0);
} catch (IOException ex) {
    Logger.getLogger(Crawler.class.getName()).log(Level.SEVERE, null, ex);
}


Answer 3:

有两种情况与内容编码:gzip头

  1. 如果数据已经被压缩(通过应用程序),内容编码:gizp头会造成数据压缩again.so其双compressed.it的,因为HTTP压缩

  2. 如果数据没有被应用,内容编码的压缩:gizp将导致数据压缩(gzip的大部分),它会自动未压缩的(未压缩)其达到给客户端之前。 UN-Zip是在大多数的网路浏览器使用默认功能。 在响应gizp头:如果发现内容编码器会做未压缩。



文章来源: How to read compressed HTML page with Content-Encoding : gzip