在之前的讨论中,我们探索了使用虚假请求检查 HTTP 响应,这是一种适合单元测试的技术。然而,我们还寻求一种在实时服务器上记录实时响应数据的方法。
一种流行的方法涉及创建中间件链。像 Negroni 这样的库提供中间件功能,其中处理程序被组合并按顺序执行。使用处理程序组合器可以实现最小中间件实现:
<code class="go">func NewFooHandler(next http.HandlerFunc) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { // Do pre-handling tasks next(w, r) // Do post-handling tasks } }</code>
然后可以将这些组合器链接起来形成处理程序:
<code class="go">h := NewFooHandler(NewBarHandler(NewBazHandler(Sink)))</code>
要将此技术应用于您的问题,您可以创建一个处理程序组合器:
<code class="go">func NewResponseLoggingHandler(next http.HandlerFunc) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { // Record the response c := httptest.NewRecorder() next(c, r) // Copy responses for k, v := range c.HeaderMap { w.Header()[k] = v } w.WriteHeader(c.Code) c.Body.WriteTo(w) } }</code>
现在,您可以创建一个将自定义处理程序与响应日志记录相结合的默认处理程序:
<code class="go">func NewDefaultHandler(next http.HandlerFunc) http.HandlerFunc { return NewResponseLoggingHandler(NewOtherStuffHandler(next)) }</code>
通过使用此默认处理程序:
<code class="go">h := NewDefaultHandler(...)</code>
所有后续处理程序将自动包含响应日志记录。
以上是如何使用'http.HandleFunc”和中间件记录实时 HTTP 响应?的详细内容。更多信息请关注PHP中文网其他相关文章!