سؤال

أحاول طباعة بيانات الاستجابة عندما أقوم بتقديم طلب 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.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top