2015-12-04 203 views
0

我一直在使用node.js來設置一個代理服務器,它將處理傳入的客戶端請求並驗證它們是否具有正確的證書以連接到服務器。在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); 

}; 

我希望能夠做到這一點的是:​​

我知道proxy.on('proxyReq)存在,但代碼設置方式,我需要能夠使用req參數。

有沒有辦法做到這一點?

如果我需要澄清我的問題,請讓我知道。

回答

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(); 
+0

感謝您的支持!你能否解釋一下你如何將頭文件複製到新的請求頭文件中?我還是有點困惑,你在上面的代碼中如何做到這一點。 –

+0

對不起,我錯過了設置標題的位置,你會在寫入之前執行它,我會更新代碼中的位置。 – ruedamanuel

+0

還有幾個問題:你傳遞給請求的選項有哪些?爲什麼這可以在代理上完成? –