"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية تسجيل استجابات HTTP دون تعديل http.ResponseWriter؟

كيفية تسجيل استجابات HTTP دون تعديل http.ResponseWriter؟

تم النشر بتاريخ 2024-11-09
تصفح:962

How to Log HTTP Responses Without Modifying http.ResponseWriter?

تسجيل استجابة HTTP في http.HandleFunc

تتناول هذه المقالة طريقة بديلة للحصول على استجابة HTTP لأغراض التسجيل دون اللجوء إلى الطلبات المزيفة أو تعديل http.ResponseWriter. نحن نقدم مفهوم تسلسل البرمجيات الوسيطة، مما يوفر تنفيذًا للأسلوب الوظيفي.

تسلسل البرمجيات الوسيطة

يتضمن تسلسل البرامج الوسيطة تمرير التحكم إلى سلسلة من المعالجات التي تؤدي مهام محددة قبل وبعد تنفيذ الطلب الرئيسي. تتلقى هذه المعالجات، المعروفة باسم البرامج الوسيطة، الطلب والمعالج التالي في السلسلة، مما يضمن التنفيذ المرتب.

نحدد وظيفة وسيطة مخصصة تعمل بمثابة مجمع معالج HTTP:

func NewResponseLoggingHandler(next http.HandlerFunc) http.HandlerFunc {
    return func(w http.ResponseWriter, r *http.Request) {
        // Replace the response writer with a recorder for subsequent handlers
        c := httptest.NewRecorder()
        next(c, r)

        // Copy data from the recorder to the original response writer
        for k, v := range c.HeaderMap {
            w.Header()[k] = v
        }
        w.WriteHeader(c.Code)
        c.Body.WriteTo(w)
    }
}

تطبيق الحل

لضمان تسجيل الاستجابة التلقائية لجميع المعالجات في فئة معينة، نقوم بإنشاء مجمع معالج آخر يتضمن البرنامج الوسيط للتسجيل:

func NewDefaultHandler(next http.HandlerFunc) http.HandlerFunc {
    return NewResponseLoggingHandler(NewOtherStuffHandler(next))
}

الآن، أي سلسلة معالجات تم إنشاؤها باستخدام NewDefaultHandler ستتضمن تلقائيًا تسجيل الاستجابة والسلوكيات الافتراضية الأخرى.

h := NewDefaultHandler(...)

الاستنتاج

باستخدام تسلسل البرامج الوسيطة، يمكننا اعتراض استجابات HTTP وتسجيلها بشفافية دون الحاجة إلى طلب تزوير أو تعديل http.ResponseWriter. يسمح هذا الأسلوب بالتسجيل المعياري ويبسط إدارة المعالج.

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3