Maison  >  Article  >  développement back-end  >  Comment enregistrer les réponses HTTP sans modifier http.ResponseWriter ?

Comment enregistrer les réponses HTTP sans modifier http.ResponseWriter ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-27 23:19:29463parcourir

How to Log HTTP Responses Without Modifying http.ResponseWriter?

Consignation de la réponse HTTP dans http.HandleFunc

Cet article traite d'une approche alternative pour obtenir la réponse HTTP à des fins de journalisation sans recourir à de fausses requêtes ou à modifier http.ResponseWriter. Nous introduisons le concept de chaînage de middleware, fournissant une implémentation de style fonctionnel.

Chaînage de middleware

Le chaînage de middleware implique de passer le contrôle à une chaîne de gestionnaires qui effectuent des tâches spécifiques avant et après l'exécution de la requête principale. Ces gestionnaires, appelés middleware, reçoivent la requête et le gestionnaire suivant dans la chaîne, garantissant une exécution ordonnée.

Nous définissons une fonction middleware personnalisée qui agit comme un combinateur de gestionnaires HTTP :

<code class="go">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)
    }
}</code>

Application de la solution

Pour garantir la journalisation automatique des réponses pour tous les gestionnaires d'une catégorie spécifique, nous créons un autre combinateur de gestionnaires qui encapsule le middleware de journalisation :

<code class="go">func NewDefaultHandler(next http.HandlerFunc) http.HandlerFunc {
    return NewResponseLoggingHandler(NewOtherStuffHandler(next))
}</code>

Maintenant, toute chaîne de gestionnaires instanciée à l'aide NewDefaultHandler inclura automatiquement la journalisation des réponses et d'autres comportements par défaut.

<code class="go">h := NewDefaultHandler(...)</code>

Conclusion

En utilisant le chaînage middleware, nous pouvons intercepter et enregistrer de manière transparente les réponses HTTP sans avoir besoin de falsifier la demande ou de modifier le http. RéponseWriter. Cette approche permet une journalisation modulaire et simplifie la gestion des gestionnaires.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn