忽略Node中HTTP请求的报头验证

Ignore header validation for HTTP requests in Node

本文关键字:报头 验证 请求 HTTP Node 忽略      更新时间:2023-09-26

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

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

URL是: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接口的一半。

使用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

取代。