| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 | var http = require('http');var https = require('https');var url = require('url');var isHttpResource = require('../utils/is-http-resource');var isHttpsResource = require('../utils/is-https-resource');var override = require('../utils/override');var HTTP_PROTOCOL = 'http:';function loadRemoteResource(uri, inlineRequest, inlineTimeout, callback) {  var proxyProtocol = inlineRequest.protocol || inlineRequest.hostname;  var errorHandled = false;  var requestOptions;  var fetch;  requestOptions = override(    url.parse(uri),    inlineRequest || {}  );  if (inlineRequest.hostname !== undefined) {    // overwrite as we always expect a http proxy currently    requestOptions.protocol = inlineRequest.protocol || HTTP_PROTOCOL;    requestOptions.path = requestOptions.href;  }  fetch = (proxyProtocol && !isHttpsResource(proxyProtocol)) || isHttpResource(uri) ?    http.get :    https.get;  fetch(requestOptions, function (res) {    var chunks = [];    var movedUri;    if (errorHandled) {      return;    }    if (res.statusCode < 200 || res.statusCode > 399) {      return callback(res.statusCode, null);    } else if (res.statusCode > 299) {      movedUri = url.resolve(uri, res.headers.location);      return loadRemoteResource(movedUri, inlineRequest, inlineTimeout, callback);    }    res.on('data', function (chunk) {      chunks.push(chunk.toString());    });    res.on('end', function () {      var body = chunks.join('');      callback(null, body);    });  })  .on('error', function (res) {    if (errorHandled) {      return;    }    errorHandled = true;    callback(res.message, null);  })  .on('timeout', function () {    if (errorHandled) {      return;    }    errorHandled = true;    callback('timeout', null);  })  .setTimeout(inlineTimeout);}module.exports = loadRemoteResource;
 |