Переопределение синтаксического анализатора HTTP Node.js

Я без проблем использую базовую функцию Node http.request()на обычных HTTP-серверах. Мне нужно использовать http.request()(или аналогичный) с серверами SHOUTcast. "Протокол" SHOUTcast полностью совместим с HTTP, за исключением одной детали... первой строки ответа.

Обычные серверы HTTP отвечают:

HTTP/1.1 200 OK

Серверы SHOUTcast отвечают:

ICY 200 OK

Опять же, остальная часть протокола такая же.Единственная разница заключается в том, что HTTP/1.xи ICY.

Я хотел бы расширить, подклассировать или как-то изменить функцию Node http.request(), чтобы я мог заставить ее работать с серверами SHOUTcast. Подключение к SHOUTcast с узлом было выполнено и раньше, но только путем повторного изобретения всего колеса. Я бы предпочел не делать этого из-за незначительной разницы в протоколе.

Мой вопрос: есть ли способ сделать одно из следующего?

  1. Расширить или переопределитьсоответствующие части парсера HTTP Node. (Я сомневаюсь, что это возможно, так как синтаксический анализатор представляет собой нативный код.)

  2. Создайте свой собственныйфрагмент кода, который анализирует соответствующие части HTTP, но повторно использует как можно больше существующих компонентов Node. для HTTP, насколько это возможно.

  3. Создайте простой внутренний прокси-сервер(или как-нибудь передайте данные), чтобы я мог изменить эту первую строку ответа сервера до того, как она достигнет синтаксического анализатора HTTP Node.

  4. Что-то еще?

Я также рассматривал возможность использования Shred, но он не предлагает возможности потоковой передачи ответа. (Он ожидает завершения всего ответа сервера перед запуском события, что не будет работать для потоковых серверов, где данные могут работать бесконечно.) В том же духе я попробовал Request, но он использует Собственный синтаксический анализатор HTTP узла, поэтому я получаю те же ошибки синтаксического анализа, что и с собственным HTTP-клиентом.

7
задан Brad 27 November 2018 в 00:47
поделиться