是否可以阻止特定的網站(例如: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