Node.js代理从外部网站返回确切的响应

我试图创buildexpress.js代理到外部网站从那里获取audio数据。 我知道像http-proxy这样的模块,但是当只有一个url-bound请求经过代理时,我认为它们是过度的。 我使用下面的代码:

 express.get('/proxy', function (req, res) { var options ={ host: "website.com", port: 80, path: "/audio/test.mp3", method: 'GET' }; http.get(options, function (audioRes) { var data = [], dataLen = 0; audioRes.on('data', function(chunk) { data.push(chunk); dataLen += chunk.length; }) .on('end', function() { var buf = new Buffer(dataLen); res.set(audioRes.headers); res.send(buf); }); }) .on('error', function (error) { console.log(error.message); }); }); 

我得到的回应,但它不能被解码为一个有效的audio。 在使用Fiddler进行debugging时,我发现服务器发送的叮咬数量与Content-Length头部中指定的数量不匹配(表示检索到的字节更less)。

我不知道如何正确返回从远程服务器检索到的确切响应。 将不胜感激任何帮助。

要通过代理发送请求,您可以在Host头中设置代理url。 您还必须指定您尝试通过代理访问的外部资源的完整URL。

 var http = require("http"); var options = { host: "proxy", port: 8080, path: "http://www.google.com", //full URL headers: { Host: "10.1.2.3" //your proxy location } }; http.get(options, function(res) { console.log(res); }); 

我不知道为什么它没有返回完整的答复。 你可以发表你的select。

更新

放置选项后试试这个里面/proxy

 http.get(options, function (audioRes) { audioRes.pipe(res); }) .on('error', function (error) { console.log(error.message); });