23

我知道chrome.webRequest.onBeforeRequest允许拦截、分析和阻止请求,但它只允许访问请求标头,而不是请求正文(据我所知)。

示例用例:考虑拦截表单值。

似乎这里有一个 API 更改提案正好表明了这一点。

还有其他方法可以实现吗?

谢谢。

4

3 回答 3

20

此功能现已添加到 API,请参阅文档

为了访问正文,您需要执行以下操作:

chrome.webRequest.onBeforeRequest.addListener(
    function(details)
    {
        console.log(details.requestBody);
    },
    {urls: ["https://myurlhere.com/*"]},
    ['requestBody']
);
于 2014-01-22T19:04:37.877 回答
9

这是我所做的

  1. 我用requestBody来获取帖子请求正文
  2. 我使用了decoder将正文解析为字符串

这是一个例子

chrome.webRequest.onBeforeRequest.addListener(
    function(details) {
        if(details.method == "POST")
        // Use this to decode the body of your post
            var postedString = decodeURIComponent(String.fromCharCode.apply(null,
                                      new Uint8Array(details.requestBody.raw[0].bytes)));
           console.log(postedString)

    },
    {urls: ["<all_urls>"]},
    ["blocking", "requestBody"]
);
于 2019-06-10T06:47:07.787 回答
2

虽然您可能无法拦截,但您可以使用标准的 AJAX 方法对其进行胶带处理。与其发出 href 请求,不如看看您是否可以进行异步调用并将其保存到未显示的 HTML 对象中。然后抓取/读取/解析/无论您的主体标准是什么,如果它通过,则将该主体对象推回当前窗口/页面。

将内容存储在被抑制的元素中,然后将相同的元素用于内容将允许您避免重复调用。不利的一面是,您将获得最终不会使用的内容的完整内容。这可能是也可能不是带宽/速度性能问题。

于 2012-07-29T22:46:18.603 回答