2

我正在构建一个代理服务器,它应该将数据从 Shoutcast 服务器转发到客户端。由于缺少 HTTP 标头,使用request甚至 Node 的模块都会失败:http

{ [Error: Parse Error] bytesParsed: 0, code: 'HPE_INVALID_CONSTANT' }

有问题的网址是:http ://stream6.jungletrain.net:8000

使用 curl 进行标头请求,我能够验证这一点:

$ curl -I http://stream6.jungletrain.net:8000
curl: (52) Empty reply from server

然而,该流工作正常,如使用curl stream6.jungletrain.net:8000.


有没有办法在request或节点中禁用标头验证http?这是我正在测试它的代码:

var express = require('express');
var request = require('request');
var app = express();

app.get('/', function (req, res) {
  request('http://stream6.jungletrain.net:8000').pipe(res);
  stream.pipe(res);
});

var server = app.listen(3000, function () {
  console.log('Server started')
});

我知道这可以通过滚动实现来实现net,但主观上也icecast-stack看到它只Stream正确实现了一半的接口。

4

1 回答 1

3

使用icecast,我能够使用on('data')事件和通过管道将其传递给 Express 响应来使其工作:

var express = require('express');
var app = express();
var icecast = require('icecast');

var url = 'http://stream6.jungletrain.net:8000';

app.get('/', function(req, res) {
    icecast.get(url, function(icecastRes) {
        console.error(icecastRes.headers);
        icecastRes.on('metadata', function(metadata) {
            var parsed = icecast.parse(metadata);
            console.error(parsed);
        });
        icecastRes.on('data', function(chunk) {
            console.log(chunk);
        })
    });
});

var server = app.listen(3000, function() {
    console.log('Server started')
});

或者简单地说:

app.get('/', function(req, res) {
    icecast.get(url).pipe(res);
});

还有一些注意事项:

看来 icecast 包已被https://www.npmjs.com/package/icy取代

于 2015-09-25T17:41:46.057 回答