Node.js发送带有base64解码字符的POST请求时,出现无效字符错误

时间:2016-11-27 13:09:40

标签: javascript node.js http post request

我正在尝试使用base64解码字符串发送POST请求,但是我收到无效字符错误。

我有这个块来生成base64解码的字符串:

var domain = "domain.com";
var decoded = Buffer.from("x3abaARV"+domain+"1cYNYtk", 'base64').toString('ascii');

然后我使用来自npm的request模块发送了POST请求:

var headers = {
    ip: "10.100.0.420",
    key: decoded,
    domain: domain
}
var options = {
      url: 'http://somedomain.com/foo/bar/example.json',
      method: 'POST',
      headers: headers,
  }

request(options, (error, response, body) => {
    if (error) {
      console.log(error);
    }
...

返回:

  

ypeError:标题内容包含无效字符       在ClientRequest.OutgoingMessage.setHeader(_http_outgoing.js:358:11)       在新的ClientRequest(_http_client.js:86:14)       在Object.exports.request(http.js:31:10)       在Request.start(/home/kuno/code/aviokarte-web/node_modules/request/request.js:744:32)       在Request.end(/home/kuno/code/aviokarte-web/node_modules/request/request.js:1435:10)       最后(/home/kuno/code/aviokarte-web/node_modules/request/request.js:566:14)       在立即。 (/home/kuno/code/aviokarte-web/node_modules/request/request.js:580:7)       在runCallback(timers.js:637:20)       在tryOnImmediate(timers.js:610:5)       at processImmediate [as _immediateCallback](timers.js:582:5)

如何正确设置?

1 个答案:

答案 0 :(得分:1)

如果检查decoded的值,您会发现存在不可打印的字符,这些字符在HTTP标头值中是不允许的。您需要为这种数据使用某种二进制安全编码(例如base64或URL /"百分比和#34;编码)。