You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

62 lines
1.2 KiB

11 years ago
'use strict';
var urlLib = require('url');
var http = require('http');
var https = require('https');
var assign = require('object-assign');
11 years ago
module.exports = function (url, opts, cb) {
11 years ago
var redirectCount = 0;
var get = function (url, opts, cb) {
if (typeof opts === 'function') {
cb = opts;
opts = {};
}
11 years ago
cb = cb || function () {};
opts = opts || {};
opts.headers = opts.headers || {'user-agent': 'https://github.com/sindresorhus/got'};
var parsedUrl = urlLib.parse(url);
var fn = parsedUrl.protocol === 'https:' ? https : http;
var arg = assign({}, parsedUrl, opts);
fn.get(arg, function (res) {
11 years ago
var ret = '';
// redirect
if (res.statusCode < 400 && res.statusCode >= 300 && res.headers.location) {
res.destroy();
11 years ago
if (++redirectCount > 10) {
cb(new Error('Redirected 10 times. Aborting.'));
return;
}
get(urlLib.resolve(url, res.headers.location), cb);
return;
}
if (res.statusCode !== 200) {
res.destroy();
11 years ago
cb(res.statusCode);
return;
}
res.setEncoding('utf8');
res.on('data', function (data) {
ret += data;
});
res.once('error', cb);
res.once('end', function () {
11 years ago
cb(null, ret);
});
}).once('error', cb);
11 years ago
};
get(url, opts, cb);
11 years ago
};