| 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;
 
 
  |