通常我们会遇到这样的场景:
我们知道所有请求,无论是页面请求还是js 发起的各种请求,最终都是通过浏览器软件发起的,服务器响应后,都是响应给浏览器的,那么整个工程可以细分为如下流程(个人理解):
puppeteer提供了在第2阶段和第4个阶段的拦截,可以完成浏览器接到请求之后,终端到远程服务器的请求,转而读取本地资源响应给上层引擎;依次来实现对资源的本地化拦截和替换;技术实现也比较简单,只需要在启用拦截后,监听page 对象的request事件进行处理即可,核心代码如下:
//启用请求拦截
this.page.setRequestInterception(true);
//监听请求事件
this.page.on('request', (req) => {
//如果包含在拒绝列表中的文件
let denyFile = this._isInCtrllist(req.url(), ctrlsfiles);
if (denyFile.getIsDenyFile()) {
//直接响应本地文件内容
req.respond({
body: denyFile.getFileContent()
});
} else {
//其它情况请求继续
req.continue();
}
})
简单的几行代码就实现了一个初级的网络拦截工具,是不是很简单实用?
完整代码 https://github.com/JerrZhang/flyover
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。