Javascript 忽略节点中HTTP请求的标头验证
我正在构建一个代理服务器,它应该将数据从Shoutcast服务器转发到客户端。使用Javascript 忽略节点中HTTP请求的标头验证,javascript,node.js,http,shoutcast,node-request,Javascript,Node.js,Http,Shoutcast,Node Request,我正在构建一个代理服务器,它应该将数据从Shoutcast服务器转发到客户端。使用request或甚至节点的http模块,由于缺少http头,此操作失败: { [Error: Parse Error] bytesParsed: 0, code: 'HPE_INVALID_CONSTANT' } 该网址为: 使用curl执行头请求时,我能够验证这一点: $ curl -I http://stream6.jungletrain.net:8000 curl: (52) Empty reply fro
request
或甚至节点的http
模块,由于缺少http头,此操作失败:
{ [Error: Parse Error] bytesParsed: 0, code: 'HPE_INVALID_CONSTANT' }
该网址为:
使用curl执行头请求时,我能够验证这一点:
$ curl -I http://stream6.jungletrain.net:8000
curl: (52) Empty reply from server
然而,正如使用curl stream6.jungletrain.net:8000
测试的那样,该流运行良好
有没有办法在
请求
或节点的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')
});
我知道这可以通过滚动实现来实现,但主观上看,它只正确地实现了流
接口的一半。使用,我能够通过使用on('data')
事件和通过管道将其传送到快速响应来实现:
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软件包已被什么类型的icecast流所取代?另外-在您的示例中,
stream.pipe(res)
在做什么?建议您查看已经基于节点的http代理实现。但就我个人而言,我不建议将nodejs作为代理服务器,最好使用nginx之类的东西。这不是一个Icecast服务器。这是Shoutcast,它不兼容HTTP,所以出现问题也就不足为奇了。@TBR很好地发现了,你是怎么发现的?我是Icecast的维护人员,我知道Icecast不会做这样的废话,但Shoutcast会。;-)谢谢,也许我应该澄清一下,但我使用的是前一个实现,它没有公开一个正确的unpipe
或close
接口。所以这个模块是否公开了这些接口?如果没有,我建议最简单的做法是尝试将它们应用到icecast中,并提交一份公关人力资源管理报告,它似乎也被替换了,旧的一个从未从NPM中删除。