diff --git a/request.js b/request.js index 700b9e0a9..dd71c8880 100644 --- a/request.js +++ b/request.js @@ -256,17 +256,7 @@ Request.prototype.init = function (options) { // Support Unix Sockets if (self.uri.host === 'unix') { - // Get the socket & request paths from the URL - var unixParts = self.uri.path.split(':') - , host = unixParts[0] - , path = unixParts[1] - // Apply unix properties to request - self.socketPath = host - self.uri.pathname = path - self.uri.path = path - self.uri.host = host - self.uri.hostname = host - self.uri.isUnix = true + self.enableUnixSocket() } if (self.strictSSL === false) { @@ -1163,6 +1153,10 @@ Request.prototype.qs = function (q, clobber) { self.url = self.uri self.path = self.uri.path + if ( self.uri.host === 'unix' ) { + self.enableUnixSocket() + } + return self } Request.prototype.form = function (form) { @@ -1411,6 +1405,19 @@ Request.prototype.destroy = function () { self.response.destroy() } } +Request.prototype.enableUnixSocket = function () { + // Get the socket & request paths from the URL + var unixParts = this.uri.path.split(':') + , host = unixParts[0] + , path = unixParts[1] + // Apply unix properties to request + this.socketPath = host + this.uri.pathname = path + this.uri.path = path + this.uri.host = host + this.uri.hostname = host + this.uri.isUnix = true +} Request.defaultProxyHeaderWhiteList = Tunnel.defaultProxyHeaderWhiteList.slice() diff --git a/tests/test-unix.js b/tests/test-unix.js index 71395a6bc..14615920b 100644 --- a/tests/test-unix.js +++ b/tests/test-unix.js @@ -6,8 +6,10 @@ var request = require('../index') , rimraf = require('rimraf') , assert = require('assert') , tape = require('tape') + , url = require('url') var path = [null, 'test', 'path'].join('/') + , searchString = '?foo=bar' , socket = [__dirname, 'tmp-socket'].join('/') , expectedBody = 'connected' , statusCode = 200 @@ -15,7 +17,9 @@ var path = [null, 'test', 'path'].join('/') rimraf.sync(socket) var s = http.createServer(function(req, res) { - assert.equal(req.url, path, 'requested path is sent to server') + var incomingUrl = url.parse(req.url) + assert.equal(incomingUrl.pathname, path, 'requested path is sent to server') + assert.equal(incomingUrl.search, searchString, 'query string is sent to server') res.statusCode = statusCode res.end(expectedBody) }) @@ -27,7 +31,12 @@ tape('setup', function(t) { }) tape('unix socket connection', function(t) { - request('http://unix:' + socket + ':' + path, function(err, res, body) { + request({ + uri: 'http://unix:' + socket + ':' + path, + qs: { + foo: 'bar' + } + }, function(err, res, body) { t.equal(err, null, 'no error in connection') t.equal(res.statusCode, statusCode, 'got HTTP 200 OK response') t.equal(body, expectedBody, 'expected response body is received')