是否可以阻止特定的网站(例如:facebook.com)发送特定的帖子请求?阻止网站发送特定的帖子请求
有没有什么办法可以“禁止”Facebook张贴到特定的网址?
我试图阻止“https://www.messenger.com/ajax/mercury/delivery_receipts.php?dpr=2”要求
是否可以阻止特定的网站(例如:facebook.com)发送特定的帖子请求?阻止网站发送特定的帖子请求
有没有什么办法可以“禁止”Facebook张贴到特定的网址?
我试图阻止“https://www.messenger.com/ajax/mercury/delivery_receipts.php?dpr=2”要求
你永远不能阻止发送HTTP请求(以及第三方,总之在网络级别阻止他们,他们连接到HTTP服务器之前,并限制您通过IP地址检测请求(请参阅下文))。
您可以尝试检测到该第三方并以不同方式处理该请求(例如立即返回403错误)。
检测第三方的主要途径有:
但一般情况下,一个GET请求的URL应该是无害的。如果你试图阻止他们做出来,很可能是因为请求有副作用(比如从数据库中删除某些东西)。
如果是这样,那么解决方案是要求POST请求。 HTTP规范说GET requests should be safe。
您可以阻止客户端的AJAX请求。
首先你需要覆盖XMLHttpRequest.prototype.open
。在此函数中,使用提供的参数调用原始的open
函数。然后存储对此XMLHttpRequest
的send
函数的引用。最后覆盖XMLHttpRequest
的send
函数。
在新的send
函数中,比较提供给open
函数调用的方法和后参数。如果它通过比较,请使用原始参数调用原始send
函数。如果它没有通过,什么都不做,您已经成功阻止了请求。
function blockXHR(compare) {
const open = XMLHttpRequest.prototype.open;
XMLHttpRequest.prototype.open = function(method, url) {
open.apply(this, arguments);
const send = this.send;
this.send = function() {
if(compare(method, url)) {
return send.apply(this, arguments);
}
console.log('blocked request');
};
};
}
下面的演示代码中的其余代码存在以演示如何使用它,它确实有效。为了简单起见,我使用了ECMAScript 2015 Language Specification中介绍的一些功能,但这些功能都不是完成此任务所必需的。
function blockXHR(compare) {
const open = XMLHttpRequest.prototype.open;
XMLHttpRequest.prototype.open = function(method, url) {
open.apply(this, arguments);
const send = this.send;
this.send = function() {
if(compare(method, url)) {
return send.apply(this, arguments);
}
console.log('blocked request');
};
};
}
const requestFactory = (method, url, callback) => {
const xhr = new XMLHttpRequest();
xhr.addEventListener('load', callback);
xhr.open(method, url);
xhr.send();
};
const comparisonFactory = (targetMethod, targetURL) =>
(method, url) => !(method === targetMethod && url === targetURL);
const callback = event => console.log(event.target.status);
blockXHR(comparisonFactory('POST', 'http://placehold.it/1x1'));
requestFactory('POST', 'http://placehold.it/1x1', callback); // blocked request
requestFactory('GET', 'http://placehold.it/1x1', callback); // 200
requestFactory('POST', 'http://placehold.it/1x1?hello', callback); // 200
我与你与他们堵在我访问的想法,但我试图阻止POST请求。哪个是我发送信息到Facebook的权利?我正在谈论聊天中的“消息已阅读”信息。换句话说,这是“我试图阻止Facebook强迫我发送一个帖子请求,更新他们关于我是否看到过这个消息”编辑:也许我奇怪地说了我的问题。我明白这可以解释为 – Glutch
@Glutch - 哦。这听起来像是更适合[超级用户](http://superuser.com/)的东西(所有想到的明显解决方案都是“安装软件/配置浏览器”而不是“编程”) – Quentin
我对半熟悉superagent,一直在使用它很多(做)请求。是否有可能“防止”与superagent发送的请求?我能以某种方式在浏览器插件中使用superagent来阻止我的浏览器发送POST请求吗? – Glutch