2

我正在尝试为外部网站创建 express.js 代理以从那里获取音频数据。我知道类似 的模块http-proxy,但认为对于只有一个 url 绑定请求通过代理的情况来说它们是多余的。我正在使用下面的代码:

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);
    });

});

我收到回复,但无法将其解码为有效音频。在使用 Fiddler 进行调试时,我发现服务器发送的字节数与Content-Length标头中指定的数字不匹配(这表明检索的字节数较少)。

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

4

1 回答 1

1

要通过代理发送请求,您可以在标头中设置代理 url Host。此外,您还必须指定您尝试通过代理访问的外部资源的完整 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);
});

我不确定为什么它没有返回完整的响应。你能发布你的选择。

更新

/proxy把选项放在里面试试这个

http.get(options, function (audioRes) {
    audioRes.pipe(res);
})
.on('error', function (error) {
    console.log(error.message);
});
于 2013-05-26T09:11:57.327 回答