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

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

Barbara Streisand
Libérer: 2024-10-27 23:19:29
original
605 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal