diff --git a/request.js b/request.js index 61e51fad3..af91a11d3 100644 --- a/request.js +++ b/request.js @@ -1198,9 +1198,6 @@ Request.prototype.json = function (val) { } self._json = true - if (!self.hasHeader('content-type')) { - self.setHeader('content-type', 'application/json') - } if (typeof val === 'boolean') { if (self.body !== undefined) { if (!/^application\/x-www-form-urlencoded\b/.test(self.getHeader('content-type'))) { @@ -1208,9 +1205,15 @@ Request.prototype.json = function (val) { } else { self.body = self._qs.rfc3986(self.body) } + if (!self.hasHeader('content-type')) { + self.setHeader('content-type', 'application/json') + } } } else { self.body = safeStringify(val) + if (!self.hasHeader('content-type')) { + self.setHeader('content-type', 'application/json') + } } if (typeof self.jsonReviver === 'function') { diff --git a/tests/test-defaults.js b/tests/test-defaults.js index 4f8e3c7fe..5b58304cf 100644 --- a/tests/test-defaults.js +++ b/tests/test-defaults.js @@ -73,7 +73,6 @@ tape('deep extend', function(t) { }, function (e, r, b) { delete b.headers.host delete b.headers.accept - delete b.headers['content-type'] delete b.headers.connection t.deepEqual(b.headers, { a: '1', b: '3', c: '4' }) t.deepEqual(b.qs, { a: '1', b: '3', c: '4' }) @@ -98,7 +97,7 @@ tape('post(string, object, function)', function(t) { }).post(s.url + '/', { json: true }, function (e, r, b) { t.equal(b.method, 'POST') t.equal(b.headers.foo, 'bar') - t.equal(b.headers['content-type'], 'application/json') + t.equal(b.headers['content-type'], undefined) t.end() }) }) @@ -109,7 +108,7 @@ tape('patch(string, object, function)', function(t) { }).patch(s.url + '/', { json: true }, function (e, r, b) { t.equal(b.method, 'PATCH') t.equal(b.headers.foo, 'bar') - t.equal(b.headers['content-type'], 'application/json') + t.equal(b.headers['content-type'], undefined) t.end() }) }) diff --git a/tests/test-json-request.js b/tests/test-json-request.js index f45c753d7..e7f39556e 100644 --- a/tests/test-json-request.js +++ b/tests/test-json-request.js @@ -72,6 +72,16 @@ testJSONValueReviver('jsonReviver', -48269.592, function (k, v) { }, 48269.592) testJSONValueReviver('jsonReviverInvalid', -48269.592, 'invalid reviver', -48269.592) +tape('missing body', function (t) { + s.on('/missing-body', function (req, res) { + t.equal(req.headers['content-type'], undefined) + res.end() + }) + request({url:s.url + '/missing-body', json:true}, function () { + t.end() + }) +}) + tape('cleanup', function(t) { s.close(function() { t.end()