为了回答上一个线程中提出的问题,本文建议记录来自实时服务器的 HTTP 响应,而无需求助伪造请求。目标是捕获标头和 JSON 有效负载以进行彻底分析。
利用中间件链接的概念,我们可以创建一个自定义 HTTP 处理程序来拦截响应并记录相关信息。具体方法如下:
通过中间件链接,您可以定义可以在主处理程序函数之前或之后执行的中间件函数。这些中间件可以执行各种任务,例如日志记录、验证或安全检查。
我们可以定义自己的功能处理程序组合器,而不是神奇的 negroni 解决方案。每个组合器处理一个特定的任务,并且可以组合起来形成执行链。例如,您可以创建一个用于响应日志记录的组合器:
<code class="go">func NewResponseLoggingHandler(next http.HandlerFunc) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { // Replace response writer with a recorder for subsequent handlers c := httptest.NewRecorder() next(c, r) // Copy response from recorder to actual response writer 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>
此组合器确保通过 NewDefaultHandler 创建的所有链都将包含响应日志记录以及 NewOtherStuffHandler 中定义的任何其他默认功能。
通过利用这些技术,您可以无缝记录来自您的实时网络服务,为调试和分析提供宝贵的见解。
以上是如何使用中间件链在 Go 中记录 HTTP 响应?的详细内容。更多信息请关注PHP中文网其他相关文章!