我想在节点中创建一个函数/API,它将帮助我计算给定 URL 的桌面和移动页面大小,并提供服务器使用的压缩/编码策略。
我找到了一种使用 axios 执行此操作的方法,因此我在这里分享我的解决方案。如有任何进一步的建议,我们将不胜感激。
我们可以使用 axios 来实现此目的,如下所示
首先我们需要为桌面和移动设备定义
User-Agent
请求标头。在这里,我使用 isMobile
作为虚拟标志,您可以在函数中传递它:
const headers = {
'User-Agent': isMobile
? 'Mozilla/5.0 (Windows NT 10.0; Android 13; SM-G981B) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Mobile Safari/537.36'
: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36' ,
'Accept-Encoding': 'gzip, deflate, br'
}
然后我们可以使用axios来获取页面大小,如下所示:
const response = await axios.get(url, {
headers,
responseType: 'arraybuffer',
validateStatus: () => true,
decompress: false,
});
const sizeInBytes = response.data.length;
const encoding = response.headers['content-encoding'] || 'none';
注:
content-length
来获取页面大小,但很多情况下服务器不提供此头,因此我使用了arraybuffer的响应类型并计算了缓冲区的长度。decompress: false
标志,则 axios/node 将默认解压缩响应,并且您 content-encoding
标头将不存在,因为您将无法识别编码类型。