分享一个小工具 Boast:如何从服务端跟踪所有 HTTP 请求,并方便回放? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
bobchengbin
V2EX    分享创造

分享一个小工具 Boast:如何从服务端跟踪所有 HTTP 请求,并方便回放?

  •  
  • &nbp; bobchengbin
    dcb9 2017-03-31 16:22:58 +08:00 2967 次点击
    这是一个创建于 3191 天前的主题,其中的信息可能已经有所发展或是发生改变。

    客户端工程师:“ xxx 接口坏了,我的程序都没动过”,后端经常会收到这样的质问,但是我们现在如何重现这个问题?有以下几种情况:

    一、后端测试了一下发现没有问题

    “我这里测试了是好的啊”,就只能让客户端工程师再操作一遍,亲眼看到错误之后就肯定是有问题了,就得去找问题,这时候这台手机,以及这台手机里面的数据都非常重要,因为这些数据可以让 Bug 重现。

    二、测试了也有问题

    这时候后端就去修改程序了,但是每一次的测试是否有问题都需要在客户端中操作,有时候的操作非常的复杂,在这上面花的时间会比较多。最后使了各种神通才终于找到问题,原来是这个用户的某某数据有异常才会出现这种情况。

    以上这种情况屡见不鲜,最麻烦的点就在于,每次都要以出现 Bug 的相同参数去请求,有时候你知道这些请求的参数,可以把它们放到 Postman 这种工具里面,但大部分时候你并不知道它对应的参数 (token)

    如果我们可以在服务端跟踪所有的请求:接口地址, Header , Body ,后端返回的 Header 、 Body ,这样我们就能查到对应的请求参数和返回值,可以直接填到 Postman 里面,要是还能一键重新请求就好了,因为我们不想修改请求的参数,只是想再以相同的参数请求一遍,这样我们来调试对应的程序。

    正好以前用过 ngrok ,发现它有一个非常好的 debug 界面,可以达到以上的要求,但现在不需要它的内网穿透功能,于是只能自己写一个程序,只包含以下功能:

    • 记录接口所有的 Request 和 Response
    • 可以一键重新请求某个 Request

    基本工作原理

    HTTP 客户端 Boast Web 服务器 | GET http://localhost:8080/ | 记录请求并进行反向代理 | Response 200 OK | ---------------------------> | --------------------------> | ------┐ | | | | | | 记录返回信息并转发给客户端 | <----┘ | <--------------------------- | <-------------------------- | ┌----------------------------------------------------------------------------┐ | url: http://localhost:8081 | | ---------------------------------------------------------------------------| | All Transactions ┌ - - - - - - - - - - - - - - - - - - - - - - - ┐ | | ---------------------- | time: 10 hours ago Client: 127.0.0.1 | | | |GET / 200 OK 100 ms | | | | | ---------------------- | Request [ Replay ] | | | | - - - - - - - - - - - - | | | | GET http://localhost/ HTTP/1.1 | | | | User-Agent: curl/7.51.0 | | | | Accept: */* | | | | | | | | Response | | | | - - - - - - - - - - - - | | | | HTTP/1.1 200 OK | | | | X-Server: HTTPLab | | | | Date: Thu, 02 Mar 2017 02:25:27 GMT | | | | Content-Length: 13 | | | | Content-Type: text/plain; charset= | | | | | | | | Hello, World | | | └ - - - - - - - - - - - - - - - - - - - - - - - ┘ | | | └----------------------------------------------------------------------------┘ 

    最近正在学习 Go ,正好拿它来完成这个小程序,取名为 Boast 为了让我们在重现 Bug 上更为主动和方便,以及更快地修复,好多花点时间来造轮子!

    Boast 项目地址

    Go 和前端都是现学现卖,欢迎大家拍砖。

    第 1 条附言    2017-04-01 09:08:42 +08:00
    准备再加个功能,就是导出 Postman 能识别的格式,这样如果要基于某个请求去修改请求数据就变得非常方便了。
    7 条回复    2017-04-04 20:45:46 +08:00
    cai314494687
        1
    cai314494687  
       2017-03-31 18:13:03 +08:00   1
    点赞
    lj61785636
        2
    lj61785636  
       2017-03-31 19:16:16 +08:00 via iPhone   1
    支持一下
    bobchengbin
        3
    bobchengbin  
    OP
       2017-03-31 19:33:45 +08:00
    @cai314494687 @lj61785636 灰常感谢, :)
    mingyun
        4
    mingyun  
       2017-03-31 23:11:42 +08:00   1
    star + 1
    fhefh
        5
    fhefh  
       2017-04-03 10:26:43 +08:00   1
    nice mark
    nnfish
        6
    nnfish  
       2017-04-04 19:47:58 +08:00   1
    star
    bobchengbin
        7
    bobchengbin  
    OP
       2017-04-04 20:45:46 +08:00
    @mingyun @fhefh @nnfish 感谢支持
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     964 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 32ms UTC 19:08 PVG 03:08 LAX 11:08 JFK 14:08
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86