这个 Go 开源库让你能够更细致地掌握 HTTP 请求过程

  在日常开发中,通过 HTTP 请求其他服务是常有的事情。通常,我们只需要发出请求,获取响应并进行处理即可,处理过程被 http 库封装了。然而有没有办法更好地掌控请求的细节呢?今天推荐的这个 Go 语言库 mediary 就是干这个的。

  具体来说,这个库是将拦截器增加到 http.Client 上,能够更好地掌控其中的细节,具体来说可以做的事情包括:

  转储(dump)请求和响应,输出到日志;在发送之前更改请求,或者在返回之前更改响应;使用 Opentracing/Jaeger 添加跟踪信息;发送相关指标到统计监控系统;

  注:拦截器这个概念最早来自 AOP(面向切面编程)。通俗来说,拦截器就是可以在目标动作的前后插入一些代码,执行一些其他的动作。

  怎么使用呢?示例如下:

  var client *http.Client

  client = mediary.Init().AddInterceptors(your interceptor).Build()

  client.Get("golang")

  看一个具体的 dump 拦截的例子:

  client := mediary.Init().AddInterceptors(dumpInterceptor).Build()

  client.Get("github")

  func dumpInterceptor(req *http.Request, handler mediary.Handler) (*http.Response, error) {

  if bytes, err := httputil.DumpRequestOut(req, true); err == nil {

  fmt.Printf("%s", bytes)

  // GET / HTTP/1.1

  // Host: github

  // User-Agent: Go-http-client/1.1

  // Accept-Encoding: gzip

  }

  return handler(req)

  }

  同时加多个拦截器也是可以的:

  client := mediary.Init().

  AddInterceptors(First Interceptor, Second Interceptor).

  AddInterceptors(Third Interceptor).

  Build()

posted @   ebuybay  阅读(154)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示