2017-07-30 61 views
-1

我按照Node.js書鍵入,但不能在IE或chrome中工作。 任何人都可以檢查問題在哪裏?下面 是代碼:node.js設置http代理

var http = require("http"); 
var url = require("url"); 
var server = http.createServer(function (sreq, sres) { 
    var url_parts = url.parse(sreq.url); 
    var opts = { 
     host: "www.163.com", 
     port: 80, 
     path: url_parts.pathname, 
     headers: sreq.headers 
    }; 
    var creq = http.get(opts, function (cres) { 
     sres.writeHead(cres.statusCode, cres.headers); 
     cres.pipe(sres); 
    }); 

    sreq.pipe(creq); 
}); 
server.listen(1337, "127.0.0.1", function() { 
    console.log("listening" + server.address().port + "......"); 
}); 
+0

什麼網址是你想進入電影它?你創建一個主機名爲「www.163.com」的服務器,然後讓它在127.0.0.1上監聽。我目前還不是NodeJS專家,但這對我來說似乎很奇怪。另外,提供更多信息。什麼不行?什麼都不打印?崩潰?等 – MrKickkiller

+0

嗨,它是代理,而不是創建一個163.com的服務器。我創建本地主機代理並請求訪問www.163.com(您可以更改爲任何已知的網站,例如www.google.com,但中國的防火牆)。此代理將向目標網站發送請求,並通過本地主機代理獲取數據並顯示。 –

回答

0

這可能是遠程服務器,www.163.com,需要一個適當的Host頭進行設置。使用您的代碼,您將發送由瀏覽器傳遞給您的服務器的Host標題;換句話說,127.0.0.1:1337(或可能的localhost:1337)。

嘗試改變標題到目標主機:

var opts = { 
    host: "www.163.com", 
    port: 80, 
    path: url_parts.pathname, 
    headers: sreq.headers 
}; 
opts.headers.host = 'www.163.com'; 
... 
+0

嗨,夥計,它的工作原理!非常感謝! –

+0

但仍有問題。如果'opts.host'與'opts.headers.host'不同。響應數據將與'opts.headers.host'一起發送。這意味着'opts.host'的設置是沒用的。 –

+0

@SunnySun opts.host是發送請求的主機,opts.headers.host爲請求設置HTTP主機頭。這些不是(嚴格地說)相關的。 – robertklep