باستخدام JPCAP لالتقاط HTML
-
26-09-2019 - |
سؤال
أحاول طباعة بيانات الاستجابة عندما أقوم بتقديم طلب HTTP ، حيث يقوم JPCAP باستنشاق الحزم.
لقد تمكنت من الحصول على بعض معلومات الرأس ، لكن لا يمكنني الحصول على محتويات HTML الفعلية. هذا هو الرمز الذي أستخدمه:
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 );
}
شكرا للمساعدة
المحلول
نظرًا لأنك قادر على قراءة رأس HTTP ، لكن لا يمكنك قراءة محتوى HTML ، أعتقد أن جسم استجابة HTTP قد تم ضغطه (على سبيل المثال ، باستخدام GZIP). يمكنك التعرف على الاستجابات المضغوطة لأن رأس استجابة HTTP يحتوي على سطر مثل:
Content-Encoding: gzip
إذا تمكنت من نشر مثال على برنامجك ، فيمكننا تأكيد هذه النظرية. في مثل هذه الحالة ، يجب عليك استخدام إلغاء ضغط هيئة الكيان للحصول على HTML المرسلة بواسطة الخادم.
لمزيد من المعلومات حول ترميز محتوى HTTP ، الرجوع إلى RFC 2616.
لا تنتمي إلى StackOverflow