我正在通过 node-webkit 开发 RSS 聚合器,我偶然发现了一个问题,即看似随机的请求量(下面的代码)将失败并出现以下任何错误:HPE_INVALID_CONSTANT、ETIMEDOUT、EAGAIN 和 HPE_INVALID_HEADER_TOKEN . 我已经按照发生的规律对它们进行了排序。
我制作了一个尽可能相关的 test.html 文件。只需将大量网页网址插入httpList
其中即可。但是,请注意您使用的 URL,您不会想要使某人的服务器崩溃!大约 56 个列表似乎可以导致错误。
顺便说一句,这真的很难复制,这意味着它必须是我可以改变的东西。有时相同的 URL 会失败,而在下一次传递时它会起作用。我也有失败的 URL,确实可以访问(我在 chrome 中打开它们没问题)。
<!DOCTYPE html>
<html>
<head>
<title>HTTP Get test</title>
</head>
<body>
<script>
var httpList = [];
var fromUrl = function(stringUrl) {
var http = require('http');
var url = require("url");
var urlData = url.parse(stringUrl);
var parser = window.document.createElement('a');
parser.href = stringUrl;
var options = {
host: urlData.host,
path: urlData.path + urlData.search + urlData.hash
};
var httpResponse = function(response) {
response.setEncoding('utf8');
request.setSocketKeepAlive(true);
var str = '';
response.on('data', function(chunk) {
str += chunk;
});
response.on('end', function() {
request.setSocketKeepAlive(false);
console.log("url",stringUrl,"was successfully parsed");
});
}
var request = http.request(options, httpResponse)
request.on('error', function(e) {
if (e.code === "ENOTFOUND") {
console.error("The feed", stringUrl, "could not be fetched.")
} else {
console.log(e, e.message, stringUrl);
}
});
request.end();
};
for(var i=0;i<httpList.length;i++) {
fromUrl(httpList[i]);
}
</script>
</body>
</html>