- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我在 Node.js v0.8.15 中使用 HTTPParser。不幸的是,一些回调永远不会被调用。
例如,下面的代码只调用onHeadersComplete
。无法让它调用 onURL
、onHeaderField
和 onHeaderValue
。
var
HTTPParser = process.binding('http_parser').HTTPParser,
parser = new HTTPParser(HTTPParser.REQUEST),
request = new Buffer(
'GET /test HTTP/1.1\r\n' +
'Host: www.example.com\r\n' +
'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/17.0 Firefox/17.0\r\n' +
'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n' +
'Accept-Language: en-US,en;q=0.5\r\n' +
'Accept-Encoding: gzip, deflate\r\n' +
'\r\n'
);
parser.onURL = function() {
console.log('onURL');
}
parser.onHeaderField = function() {
console.log('onHeaderField');
}
parser.onHeaderValue = function() {
console.log('onHeaderValue');
}
parser.onHeadersComplete = function() {
console.log('onHeadersComplete');
}
parser.execute(request, 0, request.length);
怎么了?
最佳答案
对于那些通过搜索引擎来到这里的人。最新版本的 Node 使用略有不同的组织。此代码有效:
var HTTPParser = process.binding('http_parser').HTTPParser;
var parser = new HTTPParser(HTTPParser.REQUEST);
const kOnHeaders = HTTPParser.kOnHeaders | 0;
const kOnHeadersComplete = HTTPParser.kOnHeadersComplete | 0;
const kOnBody = HTTPParser.kOnBody | 0;
const kOnMessageComplete = HTTPParser.kOnMessageComplete | 0;
const kOnExecute = HTTPParser.kOnExecute | 0;
parser[kOnHeaders] =
function(headers, url) {
console.log('kOnHeaders');
}
parser[kOnHeadersComplete] =
function(versionMajor, versionMinor, headers, method,
url, statusCode, statusMessage, upgrade, shouldKeepAlive) {
console.log('kOnHeadersComplete');
}
parser[kOnBody] =
function(b, start, len) {
console.log('kOnBody');
}
parser[kOnMessageComplete] =
function() {
console.log('kOnMessageComplete');
}
parser[kOnExecute] =
function() {
console.log('kOnExecute');
}
var ret = parser.execute(new Buffer(
'GET /test HTTP/1.1\r\n' +
'Host: www.example.com\r\n' +
'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/17.0 Firefox/17.0\r\n' +
'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n' +
'Accept-Language: en-US,en;q=0.5\r\n' +
'Accept-Encoding: gzip, deflate\r\n' +
'\r\n'
));
或者,还有一些包装器模块。该对象目前有以下方法:
具体使用方法可以引用Node源码:
关于Node.js HTTPParser 不调用一些回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13651071/
我在日志文件中收到这些警告: WARN 2013-01-15 00:08:15,550 org.eclipse.jetty.http.HttpParser- HttpParser Full for
我在 Node.js v0.8.15 中使用 HTTPParser。不幸的是,一些回调永远不会被调用。 例如,下面的代码只调用onHeadersComplete。无法让它调用 onURL、onHead
这是我将 Thin 从 1.2.7 版更新到 1.2.8 版后遇到的错误。当我卸载较新版本并告诉我的包再次使用 1.2.7 时,一切都很好。 /usr/lib/ruby/gems/1.8/gems/t
我的请求URL中有字符[和],项目部署在Tomcat8.5.33上。当我发布请求时发生了一些异常。 20-Sep-2018 10:55:36.494 WARNING [http-nio-8075-ex
源代码: import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; im
我是一名优秀的程序员,十分优秀!