如何在NodeJS中的循环内发出HTTP请求

时间:2014-07-12 08:06:18

标签: node.js

我在Node中编写命令行脚本(因为我知道JS并且在Bash上吮吸+我需要jQuery来浏览DOM)...现在我正在读取输入文件并且我遍历每个线。

如何每行发出一个HTTP请求(GET),以便我可以使用jQuery加载生成的字符串并从每个页面中提取所需的信息? 我尝试过使用NPM httpsync软件包...所以我可以在输入文件的每一行中进行一次阻止GET调用,但它不支持HTTPS,当然还有我正在点击的服务支持HTTPS。

谢谢!

3 个答案:

答案 0 :(得分:5)

async queue方式处理大量作业的好方法是request

我还建议您查看cheerio发出HTTP请求,{{3}}来处理您获得的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);

然后将所有网址添加到队列中:

q.push({ url: 'https://www.example.com/some/url' });
// ...

答案 1 :(得分:1)

我很可能会使用异步库的函数eachLimit函数。这将允许您限制活动连接的数量以及在完成所有操作时获得回调。

async.eachLimit(urls, function(url, done) {
    request(url, function(err, res, body) {
        // do something
        done();
    });
}, 5, function(err) {
    // do something
    console.log('all done!');
})

答案 2 :(得分:0)

我担心同时发出一百万个请求,而不会进行某种限制/限制并发连接的数量,但看起来Node似乎已经“开箱即用”地限制了5-6个并发连接。

这是完美的,因为它可以使我的代码更加简单,同时还充分利用Node的固有异步性。