2012-07-21 78 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对象。然后刮/读/解析/不管你的身体标准是什么,如果它通过,将该身体对象返回到当前窗口/页面。

将内容存储在一个抑制元素中,然后将相同元素用于内容可以避免重复调用。缺点是你会得到你不会用到的东西的全部内容。这可能是也可能不是带宽/速度性能问题。