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); });
- 使用来自node.js的凭证反向代理login
- app.delete使用nodeclipse IDE在express上引发语法错误
- 在passport login中的req.logIn()之后获得空数组
- 一旦客户端断开连接并重新连接服务器在Socket.io和node.js?
- 抛出Mongoose ValidationError而不是传递给callback函数,
- 如何检查req.body是否为空或不在节点中,表示?
- Ubuntu中包含Express,MongoDB和Mongoose的Node.js中的REST API。 MongoError:第一次连接时无法连接到服务器
- 不能在subprocess中使用Mongoose?
- NodeJS – Mongoose,subdoc对象没有方法.id()或.create()