您的位置 首页 golang

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

大家好,我是欧盆索思(opensource),每天为你带来优秀的开源项目!

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

项目地址:,这个库是上个月刚开源的。

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

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

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

怎么使用呢?示例如下:

 var client *http.Client
client = mediary.Init().AddInterceptors(your interceptor).Build()
client.Get("#34;)
  

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

 client := mediary.Init().AddInterceptors(dumpInterceptor).Build()
client.Get("https:// github .com")
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.com
    // 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()
  

文章来源:智云一二三科技

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

文章地址:https://www.zhihuclub.com/86819.shtml

关于作者: 智云科技

热门文章

发表评论

您的电子邮箱地址不会被公开。

网站地图