Как декодировать HTML-страницу с помощью nodejs? - PullRequest
0 голосов
/ 05 сентября 2018

Я делаю запрос на получение

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-х годов, когда неизвестный принтер взял набор шрифтов и скремблировал его, чтобы сделать книгу типовых образцов. Он пережил не только пять веков, но и скачок в электронном наборе текста, оставаясь практически неизменным. Он был популяризирован в 1960-х годах с выпуском листов Letraset, содержащих отрывки Lorem Ipsum, и совсем недавно с программным обеспечением для настольных издательских систем, таким как Aldus PageMaker, включая версии Lorem Ipsum.

Почему мы используем это? Это давно установленный факт, что читатель будет отвлекаться на удобочитаемое содержимое страницы при просмотре ее макета. Смысл использования Lorem Ipsum в том, что он имеет более или менее нормальное распределение букв, в отличие от использования «Контент здесь, контент здесь», что делает его похожим на читаемый английский. Многие настольные издательские пакеты и редакторы веб-страниц теперь используют Lorem Ipsum в качестве текста модели по умолчанию, а поиск по запросу «lorem ipsum» обнаружит многие веб-сайты, которые еще находятся в зачаточном состоянии. Различные версии развивались на протяжении многих лет, иногда случайно, иногда специально (впрыскиваемый юмор и тому подобное).

1 Ответ

0 голосов
/ 05 сентября 2018

У вас есть в заголовках, которые вы принимаете 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, который, скорее всего, вы используете.

...