Node.js HTTP - TypeError: The header content contains invalid characters
Node.js HTTP - TypeError: The header content contains invalid characters
const http = require('http');
const req = http.request({
method: 'POST',
hostname: 'cloudsso‐test.myco.com',
port: 80,
path: '/as/token.oauth2',
headers: {
'Content-Type': 'application/json',
},
agent: false // create a new agent just for this one request
}, function (res) {
res.on('headers', function (h) {
console.log('headers => ', h);
});
let data = '';
res.on('data', function (d) {
data += d;
});
res.once('end', function () {
console.log('data => ', data);
});
});
req.write(JSON.stringify({
client_id: 'xxx',
client_secret: 'secret',
grant_type: 'refresh_token',
}));
req.end();
我运行这段代码,我得到以下错误:
_http_outgoing.js:358
throw new TypeError('The header content contains invalid characters');
^
TypeError: The header content contains invalid characters
at ClientRequest.OutgoingMessage.setHeader (_http_outgoing.js:358:11)
at new ClientRequest (_http_client.js:105:12)
at Object.exports.request (http.js:31:10)
at Object.<anonymous> (/Users/alexamil/WebstormProjects/cisco/cdt-now/test/refresh-token.js:9:18)
at Module._compile (module.js:570:32)
at Object.Module._extensions..js (module.js:579:10)
at Module.load (module.js:487:32)
at tryModuleLoad (module.js:446:12)
at Function.Module._load (module.js:438:3)
at Module.runMain (module.js:604:10)
无法确定此错误的来源。我听说在较新版本的 Node 中出于安全原因,但不知道如何绕过它。
直截了当,看来我们需要使用:
headers: {
'content-type': 'application/json',
},
而不是
headers: {
'Content-Type': 'application/json',
},
这些模糊的错误消息让我很难过!
我有一个类似的问题,我正在为授权生成一个 jwt 令牌,它正在插入换行符。用 token.replace(/\r?\n|\r/g, '')
替换那些对我有用。
这不是原因。这是因为你的破折号 - 不是标准破折号:
> /-/.test('cloudsso‐test.myco.com')
false
> /‐/.test('cloudsso‐test.myco.com')
true
我遇到了同样的错误信息。
结果 - 响应 cookie header 包含 SOH ASCII command => \u0001
:
'set-cookie': [ 'someCookieName=rHA\u0001sBlP; path=/; Max-Age=900' ],
所以我不得不重写每个 header:
Object.entries(headers).forEach(([key, value]) => {
delete headers[key];
if (Array.isArray(value)) {
headers[key] = value.map(v => v.replace(/[\x01]/g, ''));
} else {
headers[key] = value.replace(/[\x01]/g, '');
}
})
const http = require('http');
const req = http.request({
method: 'POST',
hostname: 'cloudsso‐test.myco.com',
port: 80,
path: '/as/token.oauth2',
headers: {
'Content-Type': 'application/json',
},
agent: false // create a new agent just for this one request
}, function (res) {
res.on('headers', function (h) {
console.log('headers => ', h);
});
let data = '';
res.on('data', function (d) {
data += d;
});
res.once('end', function () {
console.log('data => ', data);
});
});
req.write(JSON.stringify({
client_id: 'xxx',
client_secret: 'secret',
grant_type: 'refresh_token',
}));
req.end();
我运行这段代码,我得到以下错误:
_http_outgoing.js:358
throw new TypeError('The header content contains invalid characters');
^
TypeError: The header content contains invalid characters
at ClientRequest.OutgoingMessage.setHeader (_http_outgoing.js:358:11)
at new ClientRequest (_http_client.js:105:12)
at Object.exports.request (http.js:31:10)
at Object.<anonymous> (/Users/alexamil/WebstormProjects/cisco/cdt-now/test/refresh-token.js:9:18)
at Module._compile (module.js:570:32)
at Object.Module._extensions..js (module.js:579:10)
at Module.load (module.js:487:32)
at tryModuleLoad (module.js:446:12)
at Function.Module._load (module.js:438:3)
at Module.runMain (module.js:604:10)
无法确定此错误的来源。我听说在较新版本的 Node 中出于安全原因,但不知道如何绕过它。
直截了当,看来我们需要使用:
headers: {
'content-type': 'application/json',
},
而不是
headers: {
'Content-Type': 'application/json',
},
这些模糊的错误消息让我很难过!
我有一个类似的问题,我正在为授权生成一个 jwt 令牌,它正在插入换行符。用 token.replace(/\r?\n|\r/g, '')
替换那些对我有用。
这不是原因。这是因为你的破折号 - 不是标准破折号:
> /-/.test('cloudsso‐test.myco.com')
false
> /‐/.test('cloudsso‐test.myco.com')
true
我遇到了同样的错误信息。
结果 - 响应 cookie header 包含 SOH ASCII command => \u0001
:
'set-cookie': [ 'someCookieName=rHA\u0001sBlP; path=/; Max-Age=900' ],
所以我不得不重写每个 header:
Object.entries(headers).forEach(([key, value]) => {
delete headers[key];
if (Array.isArray(value)) {
headers[key] = value.map(v => v.replace(/[\x01]/g, ''));
} else {
headers[key] = value.replace(/[\x01]/g, '');
}
})