diff --git a/nodes/core/io/21-httprequest.js b/nodes/core/io/21-httprequest.js index 21ba779d0..4cb5093af 100644 --- a/nodes/core/io/21-httprequest.js +++ b/nodes/core/io/21-httprequest.js @@ -74,6 +74,8 @@ module.exports = function(RED) { var opts = urllib.parse(url); opts.method = method; opts.headers = {}; + var ctSet = "Content-Type"; // set default camel case + var clSet = "Content-Length"; if (msg.headers) { for (var v in msg.headers) { if (msg.headers.hasOwnProperty(v)) { @@ -83,6 +85,8 @@ module.exports = function(RED) { // function. Otherwise leave them alone. name = v; } + else if (name === 'content-type') { ctSet = v; } + else { clSet = v; } opts.headers[name] = msg.headers[v]; } } @@ -103,18 +107,27 @@ module.exports = function(RED) { } else { payload = JSON.stringify(msg.payload); if (opts.headers['content-type'] == null) { - opts.headers['content-type'] = "application/json"; + opts.headers[ctSet] = "application/json"; } } } if (opts.headers['content-length'] == null) { if (Buffer.isBuffer(payload)) { - opts.headers['content-length'] = payload.length; + opts.headers[clSet] = payload.length; } else { - opts.headers['content-length'] = Buffer.byteLength(payload); + opts.headers[clSet] = Buffer.byteLength(payload); } } } + // revert to user supplied Capitalisation if needed. + if (opts.headers.hasOwnProperty('content-type') && (ctSet !== 'content-type')) { + opts.headers[ctSet] = opts.headers['content-type']; + delete opts.headers['content-type']; + } + if (opts.headers.hasOwnProperty('content-length') && (clSet !== 'content-length')) { + opts.headers[clSet] = opts.headers['content-length']; + delete opts.headers['content-length']; + } var urltotest = url; var noproxy; if (noprox) { @@ -135,7 +148,6 @@ module.exports = function(RED) { opts.path = opts.pathname = path; opts.headers = heads; opts.method = method; - //console.log(opts); urltotest = match[0]; } else { node.warn("Bad proxy url: "+process.env.http_proxy); }