【发布时间】:2015-09-25 16:56:52
【问题描述】:
我正在构建一个代理服务器,它应该将数据从 Shoutcast 服务器转发到客户端。使用 request 甚至 Node 的 http 模块,由于缺少 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 或Node 的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 接口的一半。
【问题讨论】:
-
icecast 是什么类型的流?另外 -
stream.pipe(res)在你的例子中做了什么? -
建议您查看 github.com/nodejitsu/node-http-proxy 以了解已经基于节点的 http 代理实现。但就我个人而言,我不会推荐 nodejs 作为代理服务器,你最好使用 nginx 之类的东西。
-
这不是 Icecast 服务器。它是 Shoutcast,它不符合 HTTP 标准,所以遇到问题也就不足为奇了。
-
@TBR 不错,你是怎么发现的?
-
我是 Icecast 的维护者,我知道 Icecast 不会做这种废话,但 Shoutcast 会。 ;-)
标签: javascript node.js http shoutcast node-request