2012-07-21 870 views
14

我知道chrome.webRequest.onBeforeRequest允許攔截,分析和阻止請求,但它只允許訪問請求頭,而不是請求體(據我所知)。攔截來自chrome擴展的HTTP請求體

示例用例:想想攔截表單的值。

似乎有一個API更改建議here正是這個建議。

有沒有另一種方法可以完成?

謝謝。

+2

攔截響應/請求機構目前無法使用內置在Chrome中的API。 [最新源代碼的相關部分](http://src.chromium.org/viewvc/chrome/trunk/src/chrome/browser/extensions/api/web_request/)不包含任何此類功能的跡象。如果您不能沒有該功能,您可以瀏覽[NPAPI插件](http://code.google.com/chrome)的[可能性](http://stackoverflow.com/tags/npapi/info) /extensions/npapi.html),或啓動(本地)服務器,並將特定請求重定向到本地服務器。 – 2012-07-21 21:22:04

+0

那很不幸。 NPAPI似乎對我的需求過度殺傷。但感謝您的答案。 – Ped 2012-07-22 13:01:25

回答

9

此功能現已添加到API中,請參閱documentation

爲了獲得你需要做以下的身體:

chrome.webRequest.onBeforeRequest.addListener(
    function(details) 
    { 
     console.log(details.requestBody); 
    }, 
    {urls: ["https://myurlhere.com/*"]}, 
    ['requestBody'] 
); 
+0

嘖嘖,真棒。感謝ping。 – Ped 2014-01-23 09:37:31

+1

對我來說,它總是返回undefined。也許只用於測試版頻道? – BeauCielBleu 2014-06-27 12:42:37

+0

@BeauCielBleu可能沒有請求正文。嘗試記錄URL:'console.log(「url:」+ details.url);' – georgiecasey 2015-01-04 19:28:53

2

儘管您可能無法攔截,但您可以使用標準的AJAX方法來管理磁帶。而不是製作href請求,看看是否可以進行異步調用並將其保存到未提供的HTML對象。然後刮/讀/解析/不管你的身體標準是什麼,如果它通過,將該身體對象返回到當前窗口/頁面。

將內容存儲在一個抑制元素中,然後將相同元素用於內容可以避免重複調用。缺點是你會得到你不會用到的東西的全部內容。這可能是也可能不是帶寬/速度性能問題。