我http.request()
在普通 HTTP 服务器上使用 Node 的基本功能没有问题。我需要http.request()
与 SHOUTcast 服务器一起使用(或类似的)。SHOUTcast“协议”与 HTTP 完全兼容,除了一个细节......第一个响应行。
正常的 HTTP 服务器响应:
HTTP/1.1 200 OK
SHOUTcast 服务器响应:
ICY 200 OK
同样,协议的其余部分是相同的。唯一的区别是HTTP/1.x
与ICY
。
我想扩展、子类化或以某种方式修改 Node 的http.request()
功能,以便我可以使其与 SHOUTcast 服务器一起使用。使用 Node 连接到 SHOUTcast之前已经完成,但只是通过重新发明整个轮子。我宁愿不这样做,因为这相当于一个小的协议差异。
我的问题:有没有办法执行以下操作之一?
扩展或覆盖Node 的 HTTP 解析器的相关部分。(我怀疑这是可能的,因为解析器似乎是本机代码。)
创建我自己的代码来解析 HTTP 的相关部分,但尽可能多地重用现有的 HTTP 节点组件。
创建一个简单的内部代理(或以某种方式中继数据),以便我可以在第一个服务器响应行到达 Node 的 HTTP 解析器之前对其进行修改。
还有什么?
我也考虑过使用Shred,但它不提供流式响应的选项。(它在触发事件之前等待整个服务器响应完成,这不适用于数据可以无限期运行的流服务器。)沿着同样的思路,我尝试了Request,但它使用 Node 自己的 HTTP 解析器,所以我得到与使用本机 HTTP 客户端相同的解析错误。