這是一個簡單的代理服務器監聽的流量並寫它安慰:
var http = require('http'),
httpProxy = require('http-proxy');
//
// Create a proxy server with custom application logic
//
var proxy = httpProxy.createProxyServer({});
// assign events
proxy.on('proxyRes', function (proxyRes, req, res) {
// collect response data
var proxyResData='';
proxyRes.on('data', function (chunk) {
proxyResData +=chunk;
});
proxyRes.on('end',function() {
var snifferData =
{
request:{
data:req.body,
headers:req.headers,
url:req.url,
method:req.method},
response:{
data:proxyResData,
headers:proxyRes.headers,
statusCode:proxyRes.statusCode}
};
console.log(snifferData);
});
// console.log('RAW Response from the target', JSON.stringify(proxyRes.headers, true, 2));
});
proxy.on('proxyReq', function(proxyReq, req, res, options) {
// collect request data
req.body='';
req.on('data', function (chunk) {
req.body +=chunk;
});
req.on('end', function() {
});
});
proxy.on('error',
function(err)
{
console.error(err);
});
// run the proxy server
var server = http.createServer(function(req, res) {
// every time a request comes proxy it:
proxy.web(req, res, {
target: 'http://localhost:4444'
});
});
console.log("listening on port 5556")
server.listen(5556);
這是偉大的,謝謝!但是,我需要在發送回客戶端之前實際重寫一個標頭。你的例子只是監聽/記錄數據,但不會改變它。有關如何在將其發送回客戶端之前實際進行更改的想法? – Tauren 2012-10-06 06:36:05
@Tauren - 如果您需要發送修改後的數據,您確實需要3件事:1.讀取傳入數據,2.修改它,3.發送它。 'node-http-proxy'的全部內容是封裝代理進程 - 在你的情況下,它不會真的幫你很多。因此,我建議使用節點的內置HTTP服務器和mikeal的優秀[請求庫](https://github.com/mikeal/request)作爲HTTP客戶端將代理修補到一起。 – zzen 2012-10-06 10:44:03
感謝您的反饋意見。這是我得出的結論,但希望可能有某種方法來實現它,並仍然使用node-http-proxy。它解決了我99%的需求,但有一個問題正在給我帶來麻煩。 – Tauren 2012-10-06 20:05:15