我有一个原始的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,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'); };
谢谢
解决方法
显然,http_parser模块是一个基于低级回调的解析器.它将通过这些回调发送可以解析的字符串的任何部分,由你自己做一个IncomingMessage或者你需要的任何其他东西.
我相信这样的东西可能是你正在寻找的:
var HTTPParser = process.binding('http_parser').HTTPParser; function parseMessage(request) { var _message = {}; var _parser = new HTTPParser(HTTPParser.REQUEST); _parser.onHeadersComplete = function(headers) { _message = headers; } _parser.onBody = function(body,start,len) { _message.data = body.slice(start,start+len); } var _result = _parser.execute(request,request.length); if (_result != request.length) { _message.error = _result; } else { _message.error = false; } return _message; } var request = Buffer("GET / HTTP/1.1\nHost: localhost\nContent-Length: 2\n\nHi\n\n"); result = parseMessage(request);
请注意,特定的IncomingMessage类是使用套接字进行参数化的,并且通常围绕在服务器中使用的想法构建. code for parsing it有些凌乱,要按原样重复使用(对我而言).
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。