在JS / jQuery中“调整”HTTP请求的首选技术?

时间:2013-04-03 11:53:15

标签: javascript ajax csrf web-crawler

我正在尝试使用TamperMonkey / Javascript / jQuery从单个网站“蜘蛛”一小部分数据并将其整理到一个页面。 < / p>

我已经编写了一个TM脚本(在我打开目标页面时触发)以执行以下操作:

  • 在页面中搜索特定类型的链接(通常大约8个 链接)
  • “关注”找到新页面的每个链接,找到并按照其中的单个链接
  • 提取我感兴趣的数据并将其“合并”到 我打开的原始页面。

迭代这些操作通常会导致在站点触发16(8 * 2个链接)HTTP请求。如果我手动调用它(通过控制台)来为所有16个数据以单步方式执行操作,那么我编写的代码就可以正常工作。

但是,如果我尝试设置循环并让代码只是“做它的事情”我得到 您请求的页面没有响应 键入HTML返回(在大约4次迭代之后,状态= OK)。我猜这个网站正在保护自己免受某种XSRF攻击,或者只是真的很慢?

我的问题是什么是降低我从网站请求数据的速率的首选技术?我已经考虑过构建一系列HTTP函数调用或URL进行处理,但这看起来很笨重,还有什么更适合我的惯用语吗?

我猜这一定是一个常见的问题,并且存在可靠的解决方案,但我对术语的掌握不够,无法正确搜索它。

1 个答案:

答案 0 :(得分:2)

我在另一个问题上发布了类似的答案:Browser stops working for a while after synchronous ajax call in a for loop

您可以使用“递归”功能来帮助您使用异步调用来控制流。而不是同步运行,你可以异步运行它们,并在下一个时间运行它。

类似的东西:

function doCall() {
    setTimeout(function() {
        $.ajax({
            //...
            succcess: function(data) {
                //...
                //time to start the next one
                doCall();
            },
            error: function() {
                //call the next one on error?
                doCallI();
            }
        });
    }, 1000); //1 second wait before each run
}

这样他们就可以运行异步,不要在他们打电话时阻止所有内容;但仍然是连续运行。您甚至可以在doCall函数中添加一个小延迟,以便有一些空间。