diff --git a/lib/redirect.js b/lib/redirect.js index 2d9a9d518..b086c1992 100644 --- a/lib/redirect.js +++ b/lib/redirect.js @@ -138,7 +138,10 @@ Redirect.prototype.onResponse = function (response) { request.emit('redirect') - request.init() + request.init({ + localAddress:request.localAddress, + proxy:request.proxy + }) return true } diff --git a/tests/test-localAddress.js b/tests/test-localAddress.js index 4445001d5..9d65dd157 100644 --- a/tests/test-localAddress.js +++ b/tests/test-localAddress.js @@ -1,27 +1,49 @@ 'use strict' - var request = require('../index') - , tape = require('tape') + , tape = require('tape') + +tape('bind to invalid address', function (t) { + request.get({ + uri: 'http://www.google.com', + localAddress: '1.2.3.4' + }, function (err, res) { + t.notEqual(err, null) + t.equal(err.message, 'bind EADDRNOTAVAIL') + t.equal(res, undefined) + t.end() + }) +}) -tape('bind to invalid address', function(t) { - request.get({ - uri: 'http://www.google.com', - localAddress: '1.2.3.4' - }, function(err, res) { - t.notEqual(err, null) - t.equal(err.message, 'bind EADDRNOTAVAIL') - t.equal(res, undefined) - t.end() - }) +tape('bind to local address', function (t) { + request.get({ + uri: 'http://www.google.com', + localAddress: '127.0.0.1' + }, function (err, res) { + t.notEqual(err, null) + t.equal(res, undefined) + t.end() + }) }) -tape('bind to local address', function(t) { - request.get({ - uri: 'http://www.google.com', - localAddress: '127.0.0.1' - }, function(err, res) { - t.notEqual(err, null) - t.equal(res, undefined) - t.end() - }) +tape('bind to local address on redirect', function (t) { + var os = require('os') + var localInterfaces = os.networkInterfaces() + var localIPS = [] + Object.keys(localInterfaces).forEach(function (ifname) { + localInterfaces[ifname].forEach(function (iface) { + if (iface.family !== 'IPv4' || iface.internal !== false) { + // skip over internal (i.e. 127.0.0.1) and non-ipv4 addresses + return + } + localIPS.push(iface.address) + }) + }) + request.get({ + uri: 'http://google.com', //redirects to 'http://google.com' + localAddress: localIPS[0] + }, function (err, res) { + t.equal(err, null) + t.equal(res.request.localAddress, localIPS[0]) + t.end() + }) })