如何生成 Har 文件并分析用于故障排除的 Web 请求?
可以使用 Chrome 开发工具生成 Har 文件!
在解决复杂网络问题的时候,我们需要额外获取一些信息,以便于进一步的排除问题。比如,有用户反馈网站的登陆问题或者支付问题等。因为有很多不同的因素可能会导致上述问题的发生,为了便于问题的排查,我们需要更多的数据信息。
咳咳咳,这时谷歌浏览器就要隆重登场了,其使用特殊的 har
文件可以帮助我们收集所需的大部分数据信息。因此,如何生成、导入以及分析 har
就变得非常重要了!
- [1] Chrome 生成 Har 文件
- 打开开发人员工具 -
Develop Tool
- 选择网络选项卡 -
Network
- 勾选“保留日志”和“禁用缓存” -
Preserve log
/Disable cache
- 加载包含问题的页面,等待全部加载完毕
- 右键单击某个请求将所有内容另存为
Har
文件 -Save all as HAR with content
- 打开开发人员工具 -
- [2] Chrome 导入 Har 文件
- 打开另一个
Chrome
实例 - 启用开发人员工具
- 选择网络选项卡
- 拖放
Har
文件到对应区域
- 打开另一个
- [3] 查看 Har 文件的工具
Google Chrome
Proxyman
HttpWatch
Fiddler
Firefox
Microsoft Edge
Charles Web Proxy
- [4] 在线查看 Har 文件
假装的 token 翻车记录
最近发现某个测试系统登录跳转异常,但是使用相同的镜像重新启动一组服务却能够正常运行起来,实在是百思不得其解。排除中抛开了系统和代码之外,能够想到的区别就是请求传参的问题,所以使用了 Har
文件保留了异常环境的登录跳转异常时所产生的所有请求信息(可能会报错密码等敏感信息,尽量使用测试账户)。
然后导入类似于 Proxyman
这种可以识别 Har
文件的工具,通过查看对应内容发现,异常环境和正常环境的问题就在于 token
的生成结果不一致导致的,导致跳转校验失败。对应 token
的实现涉及到使用 URL
地址来作为参数的,所以看到了如下代码。这两种写法生成的 string
存在细微差异,即前者如果 URL
地址中存在 /
符号的话会原样保持,但后者会 urlencode
编码为 %2F
,所以如果从 A 系统 跳转到 B 系统 就会出现问题。
# A系统parama生成
("{}={}".format(key, urllib.parse.quote(str(values))))
# B系统parama生成
urllib.parse.urlencode({key: values})
所以通过上面的问题排除,我们发现 Har
文件还是非常有用的!而且还有一个问题就是,需要保持思维的清晰,不会形成思维定式,才能有助于排除问题。