Skip to content

Commit

Permalink
Merge pull request #111 from gmetais/devel
Browse files Browse the repository at this point in the history
Fix parsing of gzipped distant files
  • Loading branch information
macbre committed Nov 9, 2015
2 parents 18d0923 + 0fafcee commit a9b8c95
Showing 1 changed file with 60 additions and 11 deletions.
71 changes: 60 additions & 11 deletions lib/runner.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@ var cli = require('cli'),
resolve = require('path').resolve,
analyzer = require('./index'),
preprocessors = new(require('./preprocessors'))(),
url = require('url');
url = require('url'),
zlib = require('zlib');

/**
* Return user agent to be used by analyze-css when making HTTP requests (issue #75)
Expand Down Expand Up @@ -46,15 +47,62 @@ function request(requestOptions, callback) {
client.get(requestOptions, function(resp) {
var out = '';

resp.on('data', function(chunk) {
out += chunk;
});

resp.on('end', function() {
debug('HTTP %d', resp.statusCode);
debug('Headers: %j', resp.headers);
callback(null, resp, out);
});
switch (resp.headers['content-encoding']) {
case 'gzip':
var gzip = zlib.createGunzip();

gzip.on('data', function (chunk) {
out += chunk;
});

gzip.on('end', function() {
debug('HTTP %d', resp.statusCode);
debug('Headers: %j', resp.headers);
callback(null, resp, out);
});

gzip.on('error', function(err) {
err = new Error('Error while decoding ' + requestOptions.href + ': ' + err.toString());
callback(err);
});

resp.pipe(gzip);

break;
case 'deflate':
var deflate = zlib.createInflate();

deflate.on('data', function (chunk) {
out += chunk;
});

deflate.on('end', function() {
debug('HTTP %d', resp.statusCode);
debug('Headers: %j', resp.headers);
callback(null, resp, out);
});

gzip.on('error', function(err) {
err = new Error('Error while decoding ' + requestOptions.href + ': ' + err.toString());
callback(err);
});

resp.pipe(deflate);

break;
default:
resp.on('data', function(chunk) {
out += chunk;
});

resp.on('end', function() {
debug('HTTP %d', resp.statusCode);
debug('Headers: %j', resp.headers);
callback(null, resp, out);
});

break;
}
}).on('error', function(err) {
debug(err);
callback(err);
Expand All @@ -81,7 +129,8 @@ function runner(options, callback) {
var requestOptions = url.parse(options.url);
requestOptions.rejectUnauthorized = !options.ignoreSslErrors;
requestOptions.headers = {
'User-Agent': getUserAgent()
'User-Agent': getUserAgent(),
'Accept-Encoding': 'gzip, deflate'
};

if (options.authUser && options.authPass) {
Expand Down

0 comments on commit a9b8c95

Please sign in to comment.