parsingHTTP响应string/缓冲区

我试图parsing一个StringBufferforms的HTTP响应到一个Object

结果将是一个像本地http模块的响应一样的Object

我试图导入本机的HTTPparsing器,但结果对我的用例来说太原始​​了:

 var HTTPParser = process.binding('http_parser').HTTPParser; var parser = new HTTPParser(HTTPParser.RESPONSE); parser.onHeadersComplete = function(res) { console.log('onHeadersComplete'); console.log(res); }; parser.execute(data, 0, data.length); 

这将返回这样的事情:

 onHeadersComplete { headers: [ 'X-Powered-By', 'Express', 'Content-Type', 'text/plain', 'Content-Length', '2', 'Date', 'Sat, 19 Apr 2014 20:16:45 GMT', 'Connection', 'keep-alive' ], statusCode: 200, versionMajor: 1, versionMinor: 1, shouldKeepAlive: true, upgrade: false } 

我的使用案例缺乏两件事情:

  1. 与标题值相关联的标题名称映射
  2. parsing响应主体

    • 有谁知道如何做到这一点?

预先感谢您的帮助 !

你必须填写所有的callback。

 var HTTPParser = require('http-parser-js').HTTPParser; var parser = new HTTPParser(HTTPParser.RESPONSE); parser.onHeadersComplete = function(res) { console.log(res.headers); }; parser.onBody = function(chunk, offset, length) { console.log("body", chunk.toString(), offset, length) } parser.onMessageComplete = function() { } parser.execute(new Buffer('HTTP/1.1 200 OK\r\nContent-Type: text/plain; xya\r\nContent-Length: 11\r\n\r\nhello world')) 

对于标题转换,你可以使用私有方法http.IncomingMessage(socket)._addHeaderLines(headersArr, headersNumber)

 var msg=new http.IncomingMessage() msg._addHeaderLines(['X-Powered-By', 'Express', 'Content-Type', 'text/plain', 'Content-Length', '2', 'Date', 'Sat, 19 Apr 2014 20:16:45 GMT', 'Connection', 'keep-alive' ], 10); console.log(msg); 

结果:

 IncomingMessage { ... headers: { 'x-powered-by': 'Express', 'content-type': 'text/plain', 'content-length': '2', date: 'Sat, 19 Apr 2014 20:16:45 GMT', connection: 'keep-alive' }, rawHeaders: [ 'X-Powered-By', 'Express', 'Content-Type', 'text/plain', 'Content-Length', '2', 'Date', 'Sat, 19 Apr 2014 20:16:45 GMT', 'Connection', 'keep-alive' ], ... } 

来自节点源的使用示例: https : //github.com/nodejs/node/blob/master/lib/_http_common.js

我也试图研究node.js,而我刚刚从昨天开始。 由于这是一个JavaScript的东西,这里是我build议的解决scheme。

我假设这里被parsing的对象是'res'参数。

 var headers = {}; for (index = 0; index < res.headers.length; index++) { headers[res.headers[index].replace('-', '')] = res.headers[++index]; } // or this for (index = 0; index < res.headers.length; index+=2) { var headerName = res.headers[index].replace('-', ''); headers[headerName] = res.headers[index + 1]; } // Note that we removed the '-' in the name since it's an invalid character for property name. // Access sample. console.log(headers.ContentType); console.log(headers['ContentType']); 

我希望它能帮助你。