在Node.js

时间:2015-12-04 16:24:25

标签: node.js authentication http-proxy jupyter

我一直在使用node.js来设置代理服务器,该服务器将处理传入的客户端请求,并将验证他们是否具有连接到服务器的正确证书。

我想要做的是能够将客户端的证书添加到其标题中以创建用户名,我将传递给服务器。

function (req, res) {

//Here is the client certificate in a variable 
var clientCertificate = req.socket.getPeerCertificate();

// Proxy a web request
return this.handle_proxy('web', req, res);

};

我希望能够做到的是:req.setHeader('foo','foo')

我知道proxy.on('proxyReq)存在,但代码的设置方式,我需要能够使用req参数。

有办法做到这一点吗?

如果我需要澄清我的问题,请告诉我。

1 个答案:

答案 0 :(得分:1)

您可以使用原始请求中提供的标头以及使用http.request您想要的任何额外标头来制作您自己的http请求。只需收到原始请求,将标头复制到新的请求标头中,添加新标头并发送新请求。

var data = [];
var options = {
  hostname: 'www.google.com',
  port: 80,
  path: '/upload',
  method: 'POST',
  headers: {
    'Content-Type': 'application/x-www-form-urlencoded',
    'Content-Length': postData.length
  }
};
var req = http.request(options, function(res) {

  res.setEncoding('utf8');
  res.on('data', function (chunk) {
    data.push(chunk);
  });
  res.on('end', function() {
    console.log(data.join(""));

    //send the response to your original request

  });
});

req.on('error', function(e) {
  console.log('problem with request: ' + e.message);
});

// Set headers here i.e. req.setHeader('Content-Type', originalReq.getHeader('Content-Type'));

// write data to request body

req.write(/*original request data goes here*/);
req.end();