0

我正在通过 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>
4

1 回答 1

0

请参阅此节点问题。顺便说一句,没有“解决”。

于 2013-07-03T18:09:40.120 回答