2012-06-11 42 views
3

我想實現最簡單的例子:如何使用node.js http-proxy在計算機中記錄HTTP通信?

var http = require('http'), 
var httpProxy = require('http-proxy'); 

httpProxy.createServer(function (req, res, proxy) { 
    // 
    // I would add logging here 
    // 
    proxy.proxyRequest(req, res, { host: 'www.google.com', port: 80 }); 
}).listen(18000); 

如果我在配置瀏覽器使用這個代理,我瀏覽到www.google.com我未收到任何迴應。我做錯了什麼?

我使用的是Windows 7 Chrome

+0

您可以指定什麼操作系統和瀏覽器是什麼?每個處理代理的方式不同。 – badunk

+0

這是否適合您在圖書館的最新變化? 似乎現在它是強制性的通過'目標'領域的選項,否則只是簡單地運行上述代碼給我'必須提供有效的URL的目標' –

回答

5

這裏是一個如何記錄請求的簡單示例。 我使用類似的方法將所有域名都記錄到一個數據庫中。

我複製多從http://blog.nodejitsu.com/http-proxy-middlewares

var fs = require('fs'), 
    http = require('http'), 
    httpProxy = require('http-proxy'), 

logger = function() {  
    // This will only run once 
    var logFile = fs.createWriteStream('./requests.log'); 

    return function (request, response, next) { 
    // This will run on each request. 
    logFile.write(JSON.stringify(request.headers, true, 2)); 
    next(); 
    } 
} 

httpProxy.createServer(
    logger(), // <-- Here is all the magic 
    { 
    hostnameOnly: true, 
    router: { 
     'example1.com': '127.0.0.1:8001', // server on localhost:8001 
     'example2.com': '127.0.0.1:8002' // server 2 on localhost:8002 
    } 
}).listen(8000); 
+0

這應該仍然工作?我嘗試登錄請求時,我訪問不同的網址,但無法弄清楚... – Valip

+0

這不工作了,因爲現在它是強制性的在選項中傳遞某種目標或前鋒字段。運行上面的代碼讓我必須爲Target提供有效的URL。 –

相關問題