8
votes

Comment lire la page HTML compressée avec encodage de contenu: gzip

Je demande une page Web qui envoie un codage de contenu Content: gzip forte> en-tête, mais a été bloqué comment le lire ..

My Code: P>

    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);
    }


0 commentaires

3 Réponses :


5
votes

Il y a une classe pour cela: GzipInputStream . C'est un introuvable et est donc très transparent à utiliser.


1 commentaires

Pour le faire fonctionner dans les deux cas, vous devez examiner l'en-tête «Compte-codage» qui est renvoyé. Si sa valeur est "gzip", vous devez utiliser le gzipinputtream, sinon pas.



16
votes

En fait, c'est la réponse de PB2Q, mais je poste le code complet des futurs lecteurs xxx


1 commentaires

Travaillé pour moi. Juste pour ajouter à cela, la forme compressée peut être x-gzip aussi. Mais merci beaucoup.



0
votes

Il y a deux cas avec encodage de contenu: gzip en-tête

  1. Si les données déjà compressées (par application), le codage de contenu: l'en-tête GIZP entraînera des données comprimées à nouveau. Son double compresshed.it est parce que compression HTTP

  2. Si les données ne sont pas compressées par application, encodage de contenu: GIZP entraînera la compresse des données (GZIP) et il sera automatiquement décompressé (UN-ZIP) avant qu'il ne atteigne le client. Un-Zip est une fonction par défaut disponible dans la plupart des navigateurs Web. Le navigateur fera l'UN-ZIP s'il trouve l'encodage de contenu: l'en-tête GIZP dans la réponse.


0 commentaires