问答 获取一个网站的所有页面分别有多少请求

日积跬步 · 2023年08月08日 · 最后由 明天是spring 回复于 2023年08月18日 · 9119 次阅读

背景:为了提高网站性能,开发对页面请求做了优化;有时候同样的请求会请求多次,领导让把所有页面的所有请求抓出来,做个对比。
疑问点:
1、怎么确定一个网站有多少页面
2、用什么法子抓取每个页面下的请求,包括地址、请求头、请求体、大小、时间等要素
3、网页较多,自动化实现
各位大佬有什么法子🙏

共收到 16 条回复 时间 点赞

手工抓取请求的话,可以通过浏览器的网络模块(F12-network)。

如果是考虑性能对比,我这推荐这个工具 sitespeed,它的 compare 模块可以对比两次访问页面时的花费时间、请求明细、页面大小。
官网:https://www.sitespeed.io/documentation/compare/

我感觉他想要的应该是能遍历得到所有可能的请求,类似 appscan 的自动/手动扫描?

如果要知道有那些,可以通过抓包、F12 等方法,如果要直接写入到脚本,可以使用一些录制工具,如 badbody

可以用抓包,然后写入文件,用 python 进行分析,取出重复的接口,但是可能存在误差,所以可以通过自动化多次打开页面,统计多次结果,然后最后人工判断是否准备就行。

Kerwin_Lyc 回复

一两个页面还好说,几千个页面都 F12,手都按秃噜皮了

上面忘说了 怎么自动化实现

小叮当 回复

用 appscan 扫描,可以获取全部的请求;但问题是怎么确定每个页面下有多少请求?

selenium+chromedriver 配置 proxy,类似于:

Proxy seleniumProxy = ClientUtil.createSeleniumProxy(browserMobProxy);
browserMobProxy.addRequestFilter(new RequestFilter() {
            @Override
            public HttpResponse filterRequest(HttpRequest httpRequest, HttpMessageContents httpMessageContents, HttpMessageInfo httpMessageInfo) {
                System.out.println(httpRequest.getUri());
                return null;
            }
        });
capabilities.setCapability(CapabilityType.PROXY, seleniumProxy);

感觉只能让前端开发把代码发出来看看了

用 selnium 配置个代理,然后 mitmproxy 启动个后台服务,就可以捕获页面请求有多少,全部可以打印或者存储起来

把前端所有的 url 都取出来 或者后端的接口文档

直接看后端服务的日志比较快吧,如果有 Cat 之类的,直接能看到响应时间,请求,响应这些信息的。

百度下浏览器函数 window.performance 相关,直接在 console 里面敲

有点没太明白楼主具体要做啥

为了提高网站性能,开发对页面请求做了优化

具体是做了啥优化?请求串行变并行、请求聚合(多个接口请求合并为单个)、请求数量缩减,还是?

有时候同样的请求会请求多次,领导让把所有页面的所有请求抓出来,做个对比。

要对比的是啥?同个页面优化前后的性能情况,还是不同页面之间请求数量的对比(后者个人觉得意义不大)?
对比的最终目的是啥?简单验证本次开发优化后效果是否有提升、提升多少?还是要建立长期监控机制,持续监控观测各个页面的请求速度,找出请求最慢或者页面 tti(可交互时间,详细可看 https://web.dev/i18n/zh/tti/ )最慢的 top10,进行治理?

然后针对楼主每个问题,也说下个人的一些想法:

1、怎么确定一个网站有多少页面

能看到源码的话就直接看源码里 route 路径数量,多少个 route 就多少个页面

2.用什么法子抓取每个页面下的请求,包括地址、请求头、请求体、大小、时间等要素

这里要区分下你这个抓取要求是抓你本地看实验室数据,还是要抓线上用户看大盘数据的。
如果是本地的,方法很多,前面提到的配置代理、直接 f12 等都可以。
如果是线上用户的,可以接入一些前端线上监控的 sdk 来直接实现。比如阿里云的 arms。

3、网页较多,自动化实现

如果是线下测试用,不上监控,可以通过 UI 自动化 +proxy 来做。UI 自动化逐个打开每个网页的 url,然后 proxy 捕获涉及的所有网络请求情况并保存本地。
如果是上监控,接入后直接看监控就行了。

陈恒捷 回复

哇哦 感谢大佬的解答

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册