所以这是我的情况:
我用一个相当愚蠢的控制面板来调节一个论坛。有一个报告列表(垃圾邮件等),每个条目旁边都有一个“标记为已读”按钮。问题是,没有“标记所有读取”按钮这样的东西。您必须手动点击那里的数百个按钮。
我注意到这些按钮使用以下方案打开PHP页面:
http://www.example.com/mark_as_read.php?id=1
http://www.example.com/mark_as_read.php?id=2
http://www.example.com/mark_as_read.php?id=3
...
http://www.example.com/mark_as_read.php?id=100
正如您所看到的,唯一改变的是ID
参数。
我的印象是我能以某种方式进行某种批量调用。
现在,我不是任何一种网络程序员。但是,我知道如何使用Java等方式向网站发送HTTP请求。所以我继续写了一个小程序,调用该链接100次(每次迭代增加ID号)。
它不起作用,因为您需要作为主持人进行身份验证。该网站通过浏览器的cookie确定这一点。我对此并不了解,所以我放弃了我的Java解决方案。
似乎我需要从浏览器进行这些调用,以便网站可以使用我的cookie来进行操作。
我怎样才能做到这一点?如何从浏览器中调用数百个PHP页面?
一些注意事项:
答案 0 :(得分:3)
如果您只需要快速而肮脏的解决方案,可以在浏览器JavaScript控制台中注入一些JavaScript函数。
原谅这个冗长的 - 它编译的CoffeeScript。
var mark_all_as_read, mark_as_read;
mark_as_read = function(id) {
var request;
request = new XMLHttpRequest();
request.open("get", "http://www.example.com/mark_as_read.php?id=" + id);
return request.send();
};
mark_all_as_read = function(ids) {
var id, _i, _len, _results;
_results = [];
for (_i = 0, _len = ids.length; _i < _len; _i++) {
id = ids[_i];
_results.push(mark_as_read(id));
}
return _results;
};
现在,您应该可以从控制台拨打mark_as_read(123)
或mark_all_as_read([123, 456])
。
请注意您的虚拟主机可能不同意您同时发送数百个请求。在这种情况下,您可以添加第三个参数false
request.open
方法调用。这将通过在执行下一个请求之前等待每个请求完成来显着减慢循环。
答案 1 :(得分:0)
编写一个Chrome插件,为您执行此操作。插件基本上是在您所在页面范围内运行的Javascript,因此您可以轻松读取项目列表并调用URL。我认为(但我不确定)您的插件执行的任何ajax请求也在页面范围内运行,因此不受相同原始策略的影响。
您需要一些样板代码,但幸运的是,有很多教程可以帮助您入门:
如果只是适合您,您不必注册您的插件。您可以从您创建的源代码安装它:
否则,您可以在单独的标签中打开报告。也许这很不方便,但大多数浏览器都会关闭此标签右侧的所有标签,因此您可以通过两次点击关闭所有标签。