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

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

 [[324163]]

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

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

项目地址:https://github.com/HereMobilityDevelopers/mediary,这个库是上个月刚开源的。

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

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

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

怎么使用呢?示例如下:

  1. var client *http.Client 
  2. client = mediary.Init().AddInterceptors(your interceptor).Build() 
  3. client.Get("https://golang.org"

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

  1. client := mediary.Init().AddInterceptors(dumpInterceptor).Build()  
  2. client.Get("https://github.com")  
  3. func dumpInterceptor(req *http.Request, handler mediary.Handler) (*http.Response, error) {  
  4. if bytes, err := httputil.DumpRequestOut(req, true); err == nil {  
  5. fmt.Printf("%s", bytes)  
  6. // GET / HTTP/1.1  
  7. // Host: github.com  
  8. // User-Agent: Go-http-client/1.1  
  9. // Accept-Encoding: gzip  
  10. }  
  11. return handler(req)  
  12. }  

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

  1. client := mediary.Init(). 
  2. AddInterceptors(First Interceptor, Second Interceptor). 
  3. AddInterceptors(Third Interceptor). 
  4. Build() 

 

责任编辑:张燕妮 来源: Go语言中文网
相关推荐

2023-11-20 11:56:00

前端架构域驱动设计

2018-10-18 10:05:43

HTTP网络协议TCP

2015-09-01 10:21:53

排序算法总结

2017-03-23 14:51:21

HTTP缓存CDN缓存

2017-03-23 15:05:50

HTTP缓存Cookie

2023-06-14 08:02:54

函数代码概率

2011-05-12 14:21:22

流行路由器QoS

2023-11-27 08:57:24

GoGET

2021-04-26 23:11:33

AI食物成分人工智能

2017-10-23 14:48:33

全局字体开源

2022-06-22 06:49:39

Hertz开源HTTP 框架

2011-09-06 09:48:41

MTK平台

2015-08-05 15:53:35

power星环

2010-06-30 13:56:32

构建FTP服务器

2024-04-23 13:36:00

2013-08-26 09:18:21

2024-09-30 08:30:37

2022-07-03 17:55:53

HTTP页面浏览器

2024-01-02 09:19:15

kubernetes集群HTTP

2022-05-30 13:08:30

预测性维护传感器
点赞
收藏

51CTO技术栈公众号