@Gdulinsky
js-developer

Почему ИНОГДА приходят «кракозябры» в ответ на http.get к habrahabr.ru?

В результате выполнения приведенного ниже кода в консоль иногда выводится нормальный текст, а иногда "кракозябры". С чем это может быть связано? При этом при запросах к другим сайтам (в т.ч. geektimes.ru/) такого никогда не происходит.
var http = require('http');
var href = 'http://habrahabr.ru/post/247439/';

http.get(href, function(res) {
	var chunks = [];
	res.on('data', function (data) {
		chunks.push(data);
	});
	res.on('end', function() {		
		console.log(Buffer.concat(chunks).toString().substring(0, 1000));
    }).on('error', function(err) {
        console.log("Error getting content: " + err.message);
    });
});


Примеры получаемого результата:
<!DOCTYPE html>
<html >
  <head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
    <meta content='width=1024' name='viewport'>


    <title>RackTables. С чего начать? / Хабрахабр</title>

    <meta name='yandex-verification' content='67d46b975fa41645' /> <!-- яндекс вебмастер - верификация -->

    <meta name="description" content="

Учет в IT играет очень важную роль. Безусловно, знания как настроить Catalyst с нуля, собрать degraded RAID и настроить новый инстанс БД Oracle очень ценны и человек ими
владеющий достоин..." />
    <meta name="keywords" content="racktables, схема серверной, схема стойки, расположение в стойке, где находится сервер" />

        <meta property="fb:app_id"      content="444736788986613" />
<meta property="og:type"        content="article" />
<meta property="og:url"         content="http://habrahabr.ru/post/247439/" />
<meta property="og:title"       content="RackTables. С чего начать?" />
        <meta property="

▼      ♥�}ks∟Ǒ�g2B��4�∟L��☺►��!پ�D↔���O�C�L� -♫���=$a�◄|X�}�����sx-˲wooñq�♥$�↓�_��↨�K.▼U��=3xq(i}�-��]��������z�����_8w�o�&V�����S��X<.ĩ§۴�☺▲W���☻Ao��a߹��i����♠��Z���B&��
♠�0/Z+����B?h��3��[R姮9V��P�↨�S�k��♂SW↔�Z���).▼�:§8A�^�h��\6�↔�ω�s1�0▼�OE���▼��ۃ_��%\☼�
nM�`��5�k��g�ڞ�vZf��ݩx�՚U�6�J�,↨���¶�#N�<;+♠w���0���-◄އ�{�♫tzkp;�↑�¶��↕Ʊ9�i�↓n��☼�����]<�▲EƲ�����w
�/↔⌂�x�g♦up�‼߻,∟�zJh�↔�☻;[☼▼�����☻
<
�� L�
�?����mxw▼��4+�Lj5�☼ǃC♂�↑�0x����¶��������eh�n▬��☻�`,d�˞iٖ�x�{�ax�→�^�����'8�]��:�����������C♥��x[��<�
∟�& z‼!ކV`
♠▼☼~♫/����♠6�¶���rH~�f=s�^��z��!♠q% ☻C↑�x6p>◄\�E�K��I�3u�♦���§��[�3D?�����♀7p���0♣☼p䌬���CB�-�☼�È}��1����=�♂�▬2�����-9VF�O♦K�\����z�Q�V♂%B��tmwy��X�j�^�������:Q��▬J�9�X1��
��r^���~`¶˵r�a�▼♦rg&�܁���∟�♂4꬚�Í�↑}5H?p=(�s�e��@GF��4
vɰ�&>�#<���r�m���U♥)��WڕF��{��L�s�T��^◄��Y�P�K��ʈ§�n��♫☼♣������QoU
�*�3<�S�n�K�m▬j�B�,���ٲJ�\�{@X'�ߡ@�♥�♣�fح�Q+▬�↓▲ᩝ/���z5_��Ze�T���F���N��I☺k7�F��4*�?<�#<�ۭr=_n���V�Z��
;o7K‼☺�(↔N
X��6Z��a�§|�Gx�۵r��o�
��ٴ��Hv��L♦أt8)`Kf�(�L�^�
  • Вопрос задан
  • 2649 просмотров
Решения вопроса 2
@Nc_Soft
На гзип похоже
Ответ написан
Комментировать
@Gdulinsky Автор вопроса
js-developer
Да, действительно дело оказалось в сжатии. Вот работающий пример:
var http = require('http');
var zlib = require('zlib');
var href = 'http://habrahabr.ru/post/247439/';

http.get(href, function(res) {
	var chunks = [];
	res.on('data', function (data) {
		chunks.push(data);
	});
	res.on('end', function() {		
   		var body = Buffer.concat(chunks);
		var encoding = res.headers['content-encoding'];		
		if(encoding && (encoding == 'gzip'|| encoding == 'deflate')) {
			zlib.unzip(body, function (err, buf) {
				if (!err) {
					console.log(buf.toString().substring(0, 1000));
				}
			});
        } else {
			console.log(body.toString().substring(0, 1000));
		}
    }).on('error', function(err) {
        console.log("Error getting content: " + err.message);
    });
});
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
tonymadbrain
@tonymadbrain
doam.ru
да, это сжатие
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы