如何将 Chrome 扩展挂钩到网络浏览器流量

2024-04-15

我正在尝试编写一个 chrome 扩展来拦截网络流量并修改数据。

如果有人能准确地告诉我应该使用哪个 API 以及在哪里可以找到文档,我将不胜感激。


利用网络请求 https://developer.chrome.com/extensions/webRequestAPI 并看看他们的events https://developer.chrome.com/extensions/webRequest#events.

创建具有权限的清单activeTab获取您所在的当前选项卡的权限,以及网址模式 https://developer.chrome.com/apps/match_patterns您希望启用该扩展。这webRequestBlocking需要专门设置用于阻止和修改流量的权限。

清单.json

{
  "manifest_version": 2,
  "name": "network intercepter",
  "description": "intercept/modify/block data",
  "version": "1.0",

  "background": {
    "scripts": ["background.js"]
  },

  "host_permissions": [
    "https://*.google.com/*"
  ],

  "permissions": [
    "activeTab",
    "webRequest",
    "webRequestBlocking"
  ]
}

创建后台脚本并根据您要执行的操作开始添加 webRequest 侦听器。This https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/webRequest/BlockingResponse在做出这些选择时对我很有用。

背景.js

var onBeforeSendHeadersListener = function(details) {
    // view request + headers to be send
    console.log(details);

    // block XMLHttpRequests by returning object with key "cancel"
    if (details.type == "xmlhttprequest") {
        return {
            cancel: true
        };
    }

    // modify the user agent of all script resources by changing the requestHeaders and then return an object with key "requestHeaders"
    if (details.type == "script") {
        for (var i = 0; i < details.requestHeaders.length; i++) {
            if (details.requestHeaders[i].name == "User-Agent") {
                details.requestHeaders[i].value = "I'm not a bot";
            }
        }
        return {
            "requestHeaders": details.requestHeaders
        };
    }
}


var onBeforeRequestListener = function(details) {
    // all images will now be loaded from this location instead
    // CAREFUL! CROSS ORIGIN REQUESTS WILL NOT BE BLOCKED WITH CHROME EXTENSIONS
    if (details.type == "image") {
        return {
            "redirectUrl": "https://foo.bar/image.jpg"
        };
    }
}


chrome.webRequest.onBeforeSendHeaders.addListener(onBeforeSendHeadersListener, {
    urls: ["https://*.google.com/*"]
}, ["requestHeaders", "blocking"]);

chrome.webRequest.onBeforeRequest.addListener(onBeforeRequestListener, {
    urls: ["https://*.google.com/*"]
}, ["requestBody", "blocking"]);

访问 chrome://extensions 并打开后台页面,然后转到其控制台。然后访问https://google.com https://google.com通常,您会看到所有图像都更改为新位置,XHR 被阻止,脚本资源的用户代理也发生更改,并且在后台控制台中您将找到发出的请求。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将 Chrome 扩展挂钩到网络浏览器流量 的相关文章

随机推荐

  • 如何将 bash 脚本变量与 sed 一起使用[重复]

    这个问题在这里已经有答案了 我执行以下 bash 脚本 bin bash version 1 echo version sed s version number version template txt gt readme txt 我希望用
  • 设置今日扩展小工具的通知

    我正在创建一个简单的计时器应用程序 它将重点关注今天的扩展小部件功能 用户可以通过点击从此处启动计时器 唯一的问题是我需要从小部件设置本地通知 我尝试使用 UIApplicaton sharedApplication ScheduleLoc
  • 按组填写缺失日期

    我有一个数据集 如下所示 shop id item id time value 150 1 2015 07 10 3 150 1 2015 07 11 5 150 1 2015 07 13 2 150 2 2015 07 10 15 150
  • 使用 JUnit 中的 Blobstore

    我正在尝试测试一些使用 Blobstore API 的代码 但我并不真正了解如何将一些文件放入 Blobstore 中 以下内容不起作用 private BlobKey createBlob String path throws Excep
  • 如何使用 HttpClient 解决 .Net4.0 与 .Net4.5 中 Uri 和编码 URL 的差异

    Uri Net4 0 与 Net4 5 中的行为不同 var u new Uri http localhost 5984 mycouchtests pri test 2F1 Console WriteLine u OriginalStrin
  • Postgres 动态创建序列

    我正在编写一个应用程序 其中有多个用户 用户可以在应用程序内上传报告 目前 我有一个 报告 表 其中包含所有提交的报告 其中有一个 id 字段 该字段是表上的序列主键 我指定的要求是 用户需要能够指定其报告开始计数的前缀和数字 例如 用户应
  • 每页记录数允许用户选择 - codeigniter 分页

    我有有效的分页功能 我已将限制设置为每页 5 条记录 但我希望用户能够根据需要进行更改 问题是我不知道该怎么做 在视图中 我创建了下拉菜单 因此用户可以选择他想要每页查看多少条记录 ul class dropdown menu li a h
  • android 权限 - CHANGE_COMPONENT_ENABLED_STATE

    我需要在我的代码中使用 android permission CHANGE COMPONENT ENABLED STATE 权限 因为我需要更新我的项目的另一个 apk 的组件 但它似乎并不真正适合我 这是我的代码
  • 在带有或不带有命名空间的 中使用类型

    在 C 11 中 我可以选择是否要使用带或不带命名空间 std 中定义的类型 至少我的编译器 g 4 7 接受这两种变体 我的问题是 使用 cstdint 中的 typedef 的推荐方法是什么 有或没有命名空间 有什么优点或缺点 或者这只
  • 如何获取两个 JavaScript 对象图之间的差异列表?

    我希望能够获得两个 JavaScript 对象图之间所有差异的列表 以及发生增量的属性名称和值 就其价值而言 这些对象通常以 JSON 形式从服务器检索 并且通常不超过几层 即 它可能是本身具有数据的对象数组 然后是包含其他数据对象的数组
  • git - 当输出重定向到文件时,git show 在二进制文件上使用是否安全?

    我读到可以从 Git 中的特定修订版检索单个文件 如这个问题中的回答 如何从 Git 中的特定修订版检索单个文件 https stackoverflow com questions 610208 how to retrieve a sing
  • 我可以通过编程方式选择我的线程应在多核 CPU 的哪个核心上运行吗?

    还是由操作系统控制 我听说 Google 的新 Go 语言具有内置功能 可供程序员进行精细操作 还是我理解错了 对于 Linux 操作系统 sched setaffinity是你的答案 从 Linux 内核 2 5 8 开始支持它 Name
  • Alamofire 图像:在 af_setImageWithURL() 之后从 AutoPurgingImageCache 中获取图像

    我在我的项目中使用 AlamofireImage 我用someImageView af setImageWithURL url a lot 然而 在某些时候我需要从 imageCache 手动获取图像 因为我不想将其应用到 UIImageV
  • 如何将逻辑回归模型获得的系数映射到pyspark中的特征名称

    我使用 databricks 列出的管道流构建了一个逻辑回归模型 https docs databricks com spark latest mllib binary classification mllib pipelines html
  • 使用 Plotly 渲染 MATLAB 面片 Fig2plotly()

    问题 当尝试导出使用patchMATLAB 中的命令为fig2plotly 最终输出缺少指定的面部颜色 也许演示会有所帮助 采用以下顶点和面来定义立方体 摘自 MATLAB 文档 vert 0 0 0 1 0 0 1 1 0 0 1 0 0
  • C++中如何检查数据类型?

    我对 C 相当陌生 我主要使用 python 我正在尝试检查存储在我正在处理的对象中的值的变量类型 我记得Python中有一个命令isinstance我可以使用它作为运行某些命令的条件 例如如果下一个值是字符串 则执行 A 如果是 int
  • Gradle 没有选择 Cucumber-jvm

    我正在尝试从 Gradle 运行 Cucumber jvm 但是 无论我做什么 我都无法让这些功能实际运行 当其他 JUnit 测试运行时 它们总是被跳过 我的特点在src test resources我有一个 JUnit 测试src te
  • Windows Phone 8 的内存使用限制

    Windows Phone 8 应用程序的应用程序内存使用限制是多少 我需要三种不同可用设备的内存限制 如 720p WXVGA 等 WP8 内存上限的 zen 具有三个方面 默认基线 150MB 扩展内存 180MB 和低内存设备选择退出
  • 空值并不唯一

    我在 postgres 上有这样的行 name address college john rome john rome max tokyo 我创建一个这样的表 create test name varchar 10 address varc
  • 如何将 Chrome 扩展挂钩到网络浏览器流量

    我正在尝试编写一个 chrome 扩展来拦截网络流量并修改数据 如果有人能准确地告诉我应该使用哪个 API 以及在哪里可以找到文档 我将不胜感激 利用网络请求 https developer chrome com extensions we