Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 忽略节点中HTTP请求的标头验证_Javascript_Node.js_Http_Shoutcast_Node Request - Fatal编程技术网

Javascript 忽略节点中HTTP请求的标头验证

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

我正在构建一个代理服务器,它应该将数据从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 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中删除。