【发布时间】:2022-01-11 11:57:26
【问题描述】:
我有一个原始的 HTTP 请求字符串,我需要从中创建一个对象表示。
我没有重新发明轮子,而是考虑使用内部 http 解析器来获取 http.IncomingMessage 的实例
有可能吗?
我认为是因为字符串与完整的流没有太大区别。
怎么做?
我查看了源代码,他们得到了一个请求解析器,如下所示
var HTTPParser = process.binding('http_parser').HTTPParser;
var parser = new HTTPParser(HTTPParser.REQUEST)
编辑
node.js test 的一些进展
var request = Buffer(raw);
var parser = new HTTPParser(HTTPParser.REQUEST);
parser.execute(request, 0, request.length);
编辑 2
缺少一些事件处理程序(全部)
parser.onHeadersComplete = function(res) {
console.log('onHeadersComplete');
console.log(res);
};
parser.onBody = function(body) {
console.log('body done');
console.log(body.toString());
}
parser.onMessageComplete = function(res) {
console.log('done');
};
谢谢
【问题讨论】:
-
我更新了我的问题。我有一个“GET / HTTP/1.1\nHost: localhost\n\n”字符串,我需要对其进行解析以创建一个对象。结果对象必须是 http.IncomingMessage 的实例
-
那么问题到底是什么?
-
获取 IncomingMessage 对象之前的完整工作流程。
-
为什么不使用
http模块?require('http').createServer(function(req,res){ ... })每次有请求时都会调用该函数。req已经是 http.IncomingMessage 的实例 -
我不需要 HTTP 服务器来处理请求。我只是做一个 HTTP 消息的解析器。