我如何在NodeJS的一个循环内进行HTTP请求
我正在编写一个命令行脚本(因为我知道JS和吸吮Bash +我需要通过DOM导航jQuery)…现在我正在读取一个input文件,我遍历每一行。
我如何去做每行一个HTTP请求(GET),以便我可以加载生成的string与jQuery和提取我需要从每个页面的信息? 我已经尝试使用NPM的httpsync
软件包…所以我可以使我的input文件的每行阻塞GET调用,但它不支持HTTPS,当然,我打的服务只支持HTTPS。
谢谢!
以asynchronous方式处理大量作业的好方法是asynchronous队列 。
我也build议你看看HTTP请求和cheerio处理你得到的HTML的请求。
把它们放在一起,你会得到如下的东西:
var q = async.queue(function (task, done) { request(task.url, function(err, res, body) { if (err) return done(err); if (res.statusCode != 200) return done(res.statusCode); var $ = cheerio.load(body); // ... done(); }); }, 5);
然后将所有url添加到队列中:
q.push({ url: 'https://www.example.com/some/url' }); // ...
我很可能会使用asynchronous库函数eachLimit
函数。 这将允许您扼杀活动连接的数量,并获得所有操作完成时的callback。
async.eachLimit(urls, function(url, done) { request(url, function(err, res, body) { // do something done(); }); }, 5, function(err) { // do something console.log('all done!'); })
我很担心在不进行某种限制并发连接数量的情况下进行一百万个并发请求,但是看起来Node似乎将我“开箱即用”约束在5-6个并发连接上。
这是完美的,因为它让我保持我的代码更简单,同时充分利用节点固有的asynchronous性。