2

そこから音声データを取得するために、外部 Web サイトへの express.js プロキシを作成しようとしています。のようなモジュールについては知っていますがhttp-proxy、URL バインドされたリクエストが 1 つだけプロキシを通過する場合には過剰だと思います。以下のコードを使用しています。

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

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

完全な応答が返されない理由がわかりません。オプションを投稿できますか。

アップデート

/proxyオプションを入れた後、これを内部で試してください

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