计算 URL 的页面文档大小(以字节为单位)

问题描述 投票:0回答:1

我想在节点中创建一个函数/API,它将帮助我计算给定 URL 的桌面和移动页面大小,并提供服务器使用的压缩/编码策略。

我找到了一种使用 axios 执行此操作的方法,因此我在这里分享我的解决方案。如有任何进一步的建议,我们将不胜感激。

html node.js axios filesize
1个回答
0
投票

我们可以使用 axios 来实现此目的,如下所示

  1. 首先我们需要为桌面和移动设备定义

    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'
    }
    
  2. 然后我们可以使用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';
    

注:

  1. 您可以使用响应头
    content-length
    来获取页面大小,但很多情况下服务器不提供此头,因此我使用了arraybuffer的响应类型并计算了缓冲区的长度。
  2. 如果您不使用
    decompress: false
    标志,则 axios/node 将默认解压缩响应,并且您
    content-encoding
    标头将不存在,因为您将无法识别编码类型。
© www.soinside.com 2019 - 2024. All rights reserved.