如何使用Node.js解码HTML页面?

时间:2018-09-05 16:53:36

标签: javascript html node.js request decode

我正在获取请求

function get() {
    var headers = {
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
        'Accept-Encoding': 'gzip, deflate, br',
        'Accept-Language': 'ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7',
        'Cache-Control': 'max-age=0',
        'Connection': 'keep-alive',
        'Cookie': cookie,
        'Host': 'lms.hse.ru',
        'Upgrade-Insecure-Requests': '1',
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.84 Safari/537.36',
        'X-Requested-With': 'XMLHttpRequest'
    }
    var options = {
        url: 'https://lms.hse.ru/?sl&tab=9548',
        method: 'GET',
        headers: headers
    }

    return new Promise(function (resolve, reject) {
        request(options, function (err, response, body) {
            console.log(body);
        });
    })
}

控制台输出如下:

Y�w��v�l�W[y���Ěn���H�����`�EU�@2�̌�lT��yk˱�V��,�� �=n�4��{5�a�Z��;���~Ȯ:F��������7K`G��ض��1�T�$*`a�bZ~���bhn�hٷEW�Sݞ��x�c�p�DX��cG2��r��W���M�1p%  腅�鉄�f�Iɜ������
���zj�mvP���w����eùi�n�c��i��lt�歉�����0)\Lι�@��#��n�Fж��#
                                                          ����2z.OB�3����O�=����bdb`�s���a
          ��gkÈ&.ӿXzYñmv@��f��-q�g�&�Ŧy���5XZ
�=������Y2���Ti����i��x\
                        �6~�'8��k��ט�:���GT4�fþ�U���1J���&
                                                          � �����&��O��:v0L�)��A�^
      O׶��I�J�LH=��Z�g8^hʂCO�r��N���8���bmUEߵ|�$��D(��@�1��
                                                           r�:x}��糚QJ���|j3KUL����
   �`��Zʍ���PmR��0���]����5�Eį0ǫ,o�����W����^�Y ՜U
Q�;�ľ�-�]뷢[}��,��??1E�ݹ*K*��U�m��ڻk����-�3
e3*���X��_x#�1�mߎJ���m8�h�.����)��m�b���M٦�zf���G������T�pEa�   �
ɓ�l��1��V�Dt�'�9]VJ�Yo���K����Rd%�u�=�N4�Z��i,�;��m�%`����k!����w�u�~�  7
�D��l���c�>�u2p���E��~�$V^���Q�_&��2S�zV�G�kܑk�mZ��1Ӳ��]d��%�[^a!���|\�I��"Sd�ʫ`��p�vv��~�u?�J����7�h�F�~�{9=���a*H�`x��������22;)���31�N

在邮递员中,相同的响应看起来是这样的:

<!DOCTYPE HTML>

<html>
<head>
    <title>LMS HSE</title>
    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
    <meta name="description" content="" />
    <meta name="keywords" content="" />
    <!--[if lte IE 8]><script src="css/ie/html5shiv.js"></script><![endif]-->
    <script src="js/jquery.min.js"></script>
    <script src="js/jquery.scrolly.min.js"></script>
    <script src="js/skel.min.js"></script>
    <script src="js/init.js"></script>
    <script type="text/javascript" src="js/jquery.fileDownload.js"></script>
    <noscript>
        <link rel="stylesheet" href="css/skel.css" />
        <link rel="stylesheet" href="css/style.css?v=1" />
        <link rel="stylesheet" href="css/style-desktop.css" />
    </noscript>
    <link rel="icon" type="image/x-icon" href="favicon.ico" />
    <!--[if lte IE 8]><link rel="stylesheet" href="css/ie/v8.css" /><![endif]-->
    <!--[if lte IE 9]><link rel="stylesheet" href="css/ie/v9.css" /><![endif]-->

<style type="text/css">
/*
table {
width: 80%;
margin: auto;
}
*/
td {
text-align:left;
border-bottom: dotted 1px;
padding: 6px;
} ...

如何在nodejs中对其进行解码?

Lorem Ipsum只是印刷和排版行业的伪文本。自1500年代以来,Lorem Ipsum一直是行业的标准伪文本,当时一位不知名的打印机拿起一个厨房,将其打乱成一本样本书。它不仅生存了五个世纪,而且在电子排版方面也取得了飞跃,但基本上没有改变。它在1960年代开始流行,发布了包含Lorem Ipsum段落的Letraset工作表,最近又发布了包括Alres PageMaker在内的桌面发行软件,包括Lorem Ipsum的版本。

为什么要使用它? 早已确定的事实是,在查看页面布局时,读者会被页面的可读内容分散注意力。使用Lorem Ipsum的要点是,它具有大致的字母正态分布,而不是使用“这里的内容,这里的内容”,使它看起来像可读的英语。现在,许多桌面出版软件包和网页编辑器都使用Lorem Ipsum作为其默认模型文本,并且搜索“ lorem ipsum”将发现许多仍处于起步阶段的网站。这些年来,各种版本都有所发展,有时是偶然的,有时是故意的(注入幽默等)。

1 个答案:

答案 0 :(得分:1)

您在标头中接受gzip, deflate, br,但您并未告知请求gzip:true,因此不会解压缩响应。

编辑得更准确

var options = {
    url: 'https://lms.hse.ru/?sl&tab=9548',
    method: 'GET',
    headers: headers,
    gzip: true 
}

这是假设您正在使用https://www.npmjs.com/package/request,这很有可能是您使用的。