Да, действительно дело оказалось в сжатии. Вот работающий пример:
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);
});
});