Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

follow-redirects

Package Overview
Dependencies
Maintainers
1
Versions
68
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

follow-redirects - npm Package Compare versions

Comparing version 0.0.2 to 0.0.3

141

index.js

@@ -22,86 +22,89 @@ var nativeHttps = require('https'),

h.request = function (options, callback, redirectOptions) {
h.request = function (h) {
return function (options, callback, redirectOptions) {
redirectOptions = redirectOptions || {};
redirectOptions = redirectOptions || {};
var max = (typeof options === 'object' && 'maxRedirects' in options) ? options.maxRedirects : exports.maxRedirects;
var max = (typeof options === 'object' && 'maxRedirects' in options) ? options.maxRedirects : exports.maxRedirects;
var redirect = _.extend({
count: 0,
max: max,
clientRequest: null,
userCallback: callback
}, redirectOptions);
var redirect = _.extend({
count: 0,
max: max,
clientRequest: null,
userCallback: callback
}, redirectOptions);
//console.log(redirect.count);
//console.log(redirect.max);
/**
* Emit error if too many redirects
*/
if (redirect.count > redirect.max) {
var err = new Error('Max redirects exceeded. To allow more redirects, pass options.maxRedirects property.');
redirect.clientRequest.emit('error', err);
return redirect.clientRequest;
}
//console.log(redirect.count);
//console.log(redirect.max);
/**
* Emit error if too many redirects
*/
if (redirect.count > redirect.max) {
var err = new Error('Max redirects exceeded. To allow more redirects, pass options.maxRedirects property.');
redirect.clientRequest.emit('error', err);
return redirect.clientRequest;
}
redirect.count++;
redirect.count++;
/**
* Parse URL from options
*/
var reqUrl;
if (typeof options === 'string') {
reqUrl = options;
}
else {
reqUrl = url.format(_.extend({ protocol: protocol }, options));
}
/**
* Parse URL from options
*/
var reqUrl;
if (typeof options === 'string') {
reqUrl = options;
}
else {
reqUrl = url.format(_.extend({ protocol: protocol }, options));
}
/*
* Build client request
*/
var clientRequest = this.__proto__.request(options, redirectCallback(reqUrl, redirect));
/*
* Build client request
*/
var clientRequest = h.__proto__.request(options, redirectCallback(reqUrl, redirect));
// Save user's clientRequest so we can emit errors later
if (!redirect.clientRequest) redirect.clientRequest = clientRequest;
// Save user's clientRequest so we can emit errors later
if (!redirect.clientRequest) redirect.clientRequest = clientRequest;
/**
* ClientRequest callback for redirects
*/
function redirectCallback (reqUrl, redirect) {
return function (res) {
// status must be 300-399 for redirects
if (res.statusCode < 300 || res.statusCode > 399) {
//console.log('[' + res.statusCode + '] callback user on url ' + reqUrl);
return redirect.userCallback(res);
}
/**
* ClientRequest callback for redirects
*/
function redirectCallback (reqUrl, redirect) {
return function (res) {
// status must be 300-399 for redirects
if (res.statusCode < 300 || res.statusCode > 399) {
//console.log('[' + res.statusCode + '] callback user on url ' + reqUrl);
return redirect.userCallback(res);
}
// no `Location:` header => nowhere to redirect
if (!('location' in res.headers)) {
//console.log('[no location header] callback user on url ' + reqUrl);
return redirect.userCallback(res);
}
// no `Location:` header => nowhere to redirect
if (!('location' in res.headers)) {
//console.log('[no location header] callback user on url ' + reqUrl);
return redirect.userCallback(res);
}
// save the original clientRequest to our redirectOptions so we can emit errors later
// save the original clientRequest to our redirectOptions so we can emit errors later
// need to use url.resolve() in case location is a relative URL
var redirectUrl = url.resolve(reqUrl, res.headers['location']);
// we need to call the right api (http vs https) depending on protocol
var proto = url.parse(redirectUrl).protocol;
proto = proto.substr(0, proto.length - 1);
//console.log('Redirecting from ' + reqUrl + ' to ' + redirectUrl);
return module.exports[proto].get(redirectUrl, redirectCallback(reqUrl, redirect), redirect);
};
// need to use url.resolve() in case location is a relative URL
var redirectUrl = url.resolve(reqUrl, res.headers['location']);
// we need to call the right api (http vs https) depending on protocol
var proto = url.parse(redirectUrl).protocol;
proto = proto.substr(0, proto.length - 1);
//console.log('Redirecting from ' + reqUrl + ' to ' + redirectUrl);
return module.exports[proto].get(redirectUrl, redirectCallback(reqUrl, redirect), redirect);
};
}
return clientRequest;
}
}(h);
return clientRequest;
}
// see https://github.com/joyent/node/blob/master/lib/http.js#L1623
h.get = function (options, cb, redirectOptions) {
var req = this.request(options, cb, redirectOptions);
req.end();
return req;
};
h.get = function (h) {
return function (options, cb, redirectOptions) {
var req = h.request(options, cb, redirectOptions);
req.end();
return req;
};
}(h);
}
{
"name": "follow-redirects",
"version": "0.0.2",
"version": "0.0.3",
"description": "HTTP and HTTPS modules that follow redirects.",

@@ -5,0 +5,0 @@ "main": "index.js",

@@ -65,18 +65,19 @@ var https = require('../').https,

*/
//console.log((proto + '.' + 'request(' + url + ')').blue);
//var req = http.request(url, function(res) {
////console.log('STATUS: ' + res.statusCode);
////console.log('HEADERS: ' + JSON.stringify(res.headers));
//res.setEncoding('utf8');
//res.on('data', function (chunk) {
//console.log('BODY: ' + chunk);
//});
//});
console.log((proto + '.' + 'request(' + url + ')').blue);
var request = http.request;
var req = request(url, function(res) {
//console.log('STATUS: ' + res.statusCode);
//console.log('HEADERS: ' + JSON.stringify(res.headers));
res.setEncoding('utf8');
res.on('data', function (chunk) {
console.log('BODY: ' + chunk);
});
});
//req.on('error', function(e) {
//console.log('problem with request: ' + e.message);
//});
req.on('error', function(e) {
console.log('problem with request: ' + e.message);
});
//req.end();
req.end();
};
});
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc