2010-09-01 3 views
0

J'essaie d'imprimer les données de réponse lorsque je fais une requête HTTP, où jpcap renifle les paquets.Utilisation de jpcap pour capturer html

J'ai réussi à obtenir des informations d'en-tête, mais je ne peux pas obtenir le contenu HTML réel. Voici le code que je utilise:

try { 
     NetworkInterface[] devices = JpcapCaptor.getDeviceList(); 

     System.out.println("Opening interface"); 
     JpcapCaptor captor=JpcapCaptor.openDevice(devices[0], 65535, true, 20); 
     captor.setFilter("ip and tcp", true); 

     while(true) { 
      Packet thisPacket = captor.getPacket(); 

      if(thisPacket != null) { 
       TCPPacket p = (TCPPacket)thisPacket; 
       System.out.println(p.toString()); 
      } 
     } 

    } catch (Exception e) { 
     System.out.println("Error: " + e); 
    } 

Merci pour l'aide

Répondre

2

Puisque vous êtes en mesure de lire l'en-tête HTTP, mais vous ne pouvez pas lire le contenu HTML, je suppose que le corps de la réponse HTTP a été compressée (par exemple, en utilisant gzip). Vous pouvez reconnaître les réponses compressées parce que l'en-tête de réponse HTTP contient une ligne comme:

Content-Encoding: gzip 

Si vous pouviez poster un exemple de sortie de votre programme, nous pourrions confirmer cette théorie. Dans ce cas, vous devez utiliser le décompresseur du corps d'entité pour obtenir le code HTML envoyé par le serveur.

Pour plus d'informations sur le codage de contenu HTTP, reportez-vous à RFC 2616.

+0

Oh .. il s'est avéré que la page de test que j'utilisais était mise en cache, donc le serveur ne retournait aucune nouvelle donnée. La vraie réponse a été compressée en utilisant gzip, donc je vais essayer de trouver une fonction pour la dégonfler. Merci beaucoup :) – Matt

Questions connexes