使用浏览器插件修改request请求header头

2023-10-26


前言

最近遇到了一个疑似header头引发的bug,需要修改header头来验证,于是写了个插件来实现


一、插件结构

浏览器插件相关的东西我这里就不说了,简单说下结构
在这里插入图片描述

background.js: 实现修改header头的逻辑,插件加载即运行
manifest.json: 插件的一些配置项

二、代码

1.插件配置项

manifest.json代码如下:

{
  "name": "editHeader",
  "description": "edit header",
  "version": "1.0.0",
  "manifest_version": 2,
  "permissions": ["webRequest", "webRequestBlocking", "http://*/*", "https://*/*"],
  "background": {
    "scripts": ["./background/background.js"],
    "persistent": true
  }
}

每个参数对应的含义我就不多说了,manifest.json的配置项很多,可以自己百度
其中比较关键的是permissions中的webRequest,这个配置了插件才能有拦截请求的权限

2.功能代码

background.js代码如下:

let targetUrl = 'https://gitee.com/' //要修改的目标url
let headerObj = {
  test: '123456',
  'User-Agent': '456'
} //要修改的header头参数,有则修改,无则添加
chrome.runtime.onInstalled.addListener(function () {
  console.log('插件已被安装')
})
function replaceHeader(url, requestHeaders) {
  if (url === targetUrl) {
    for (let key in headerObj) {
      const idx = requestHeaders.findIndex(x => x.name === key)
      if (idx !== -1) {
        // 有,则修改
        requestHeaders[idx].value = headerObj[key]
      } else {
        // 无,则添加
        requestHeaders.push({ name: key, value: headerObj[key] })
      }
    }
  }
  return requestHeaders
}
function updateListeners() {
  if (!listener)
    listener = function (details) {
      var header_map = { requestHeaders: details.requestHeaders }
      if (details && details.url && details.requestHeaders && details.requestHeaders.length > 0) {
        header_map = { requestHeaders: replaceHeader(details.url, details.requestHeaders) }
      }
      return header_map
    }
  chrome.webRequest.onBeforeSendHeaders.addListener(listener, { urls: ['<all_urls>'] }, ['requestHeaders', 'blocking', 'extraHeaders'])
}
var listener = null
updateListeners()

大致逻辑的话就是通过chrome提供的onBeforeSendHeaders钩子来修改header头


项目地址

github: https://github.com/Ceslsius/editHeader


总结

目前每修改一次参数就需要重新加载一次插件,后续的话准备做成可配置

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

使用浏览器插件修改request请求header头 的相关文章

  • Jquery获取选中的复选框

    您好 我想获取页面中选定复选框的列表 实际上我真正需要的是获取复选框旁边的元素的文本 该元素是一个 html 元素 li 代码如下 但它不起作用 这是我当前的 jQuery document ready function target cl
  • createHTMLNotification() 替换

    我创建了一个 Chrome 扩展程序 其中使用createHTMLNotification 在所有内容之上显示一个窗口 然而 从 Chrome 28 开始 谷歌决定放弃createHTMLNotification 完全 为什么 谷歌 为什么
  • 将 Javascript 对象的属性从 string 更改为 int

    我有一个对象数组 每个对象具有三个属性 年份 总计 人均 例子 0 Object per capita 125 8 total 1007 2 year 2009 这些属性是字符串 我想创建一个循环来遍历数组并将它们转换为 int 我尝试了以
  • Jquery 悬停卡

    我在用着http designwithpc com Plugins Hovercard http designwithpc com Plugins Hovercard 但我不知道如何在悬停卡上声明 var 每个工作描述都有自己的 ID 当悬
  • Vue 3 Composition API 提供/注入在单文件组件中不起作用

    我正在使用 Composition API 在 VueJS 3 中创建一个库 我实现了提供 注入 如中所述docs https v3 vuejs org guide composition api provide inject html i
  • 为什么 window 与 Internet Explorer 中的 window.self 不同?

    关于我如何遇到这个问题有一个复杂的背景故事 但为什么self属性不完全等于窗口本身 在 Safari 和 Firefox 及其朋友中 结果如我所料 gt window window self true gt window window se
  • Number.IsNaN() 比 isNaN() 更糟糕吗

    Soooooo isNaNJavaScript 显然被破坏了 比如 isNaN isNaN isNaN true isNaN false isNaN 0 返回 false 当它们看起来都是 不是数字 在 ECMAScript 6 中 草案包
  • 如何在网站上使用 svg 元素制作块的屏幕截图?

    我在网站上创建了一个构造函数 其本质是将所选元素及其颜色 svg中的元素 添加到访问者选择的背景和背景颜色 png中的背景 中 然后必须单击 保存 结果 按钮并仅执行工作区的屏幕截图 我写了这个脚本 但它需要屏幕截图 但只有背景 并忽略选定
  • 为什么 setTimeout 在 Chrome 中触发两次,而在 IE 或 Firefox 中则不然?

    有人能告诉我为什么 javascript 函数 生成新号码 在 Chrome 中触发两次 但在 IE 或 Firefox 中则不会 使用 Chrome 20 0 1132 57 IE9 和 Firefox 13
  • React autoFocus 将光标设置为输入值的开头

    我有一个受控输入 最初显示一个值 我已将该输入设置为自动聚焦 但当我希望它出现在末尾时 光标出现在输入的开头 我知道这可能是因为自动对焦是在值之前添加的 但我不能 100 确定 在输入字段末尾完成光标初始化的最佳方法是什么 var Test
  • 如何通过单击链接来更改 div 的内容?

    这是我的网页的 修改后的 jsfiddle 它还有很多 而且定位是正确的 与此相反 http jsfiddle net ry0tec3p 1 http jsfiddle net ry0tec3p 1 a href class btn1 st
  • 如何在另一个自定义 Hook 中使用返回值的自定义 Hook?

    我正在使用 React native 其中有一个名为的自定义 HookuseUser使用以下方法从 AWS Amplify 获取用户信息Auth getUserInfro方法 然后获取返回对象的一部分并用它设置一个状态变量 我还有另一个名为
  • 使用 JavaScript 移动页面上的按钮

    我的按钮可以移动 但奇怪的是 我无法弄清楚偏移是否有问题 我希望我的按钮随着鼠标光标移动 但现在它的移动方式不是我想要的 有时它会消失 另外 创建的新按钮是重叠的 我不知道如何解决这个问题并拥有更好的外观 var coorA var coo
  • LeafleteachLayer函数不会迭代所有Layer

    使用 GeoJSON 数据数组创建一些标记 getJSON GetLocationsServlet function data L geoJSON data onEachFeature onEachFeature addTo mymap G
  • 使用 Javascript 设置 cookie [重复]

    这个问题在这里已经有答案了 我正在尝试构建我的第一个移动应用程序 它需要连接到我的 mysql 数据库并使用 json 返回数据 这很好 目前我有一个登录系统 一旦确定用户名和密码存在 它就会返回一条成功消息 对于下一步 我想在我的页面上使
  • 使用 Jade 评估自定义 javascript 方法 (CircularJSON)

    我想通过 Jade 将一个对象解析为客户端 JavaScript 通常这会起作用 script var object JSON parse JSON stringify object but my object is circular ht
  • Rails 3.1+ 的 Jasmine 与 Mocha JavaScript 测试 [已关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我对茉莉花有经验并且非常喜欢它 有谁有 Jasmine 和 Mocha 的经验 特别是 Rails 的经验吗 我想知道是否值得转用 我已经在 J
  • $resource.query 返回分割字符串(字符数组)而不是字符串

    我正在使用像下面这样的 Angular resource angular module app factory data function resource var Con resource api data update method P
  • 滚动顶部不符合预期

    Note 由于上次忘记奖励而重新开放赏金 A Woff 大师已经给出答案 我想在用户展开某一行时到达该行 这样当最后一个可见行展开时 用户不必向下滚动即可查看内容 I used example tbody on click td green
  • 如何从 json 文件创建模型? (ExtJS)

    这是我想使用 json 文件创建的模型 Ext define Users extend Ext data Model fields name user id type int name user name type string 为了根据服

随机推荐

  • Python报“TypeError: a bytes-like object is required, not ‘str’ ”解决办法

    import os sys 打开文件 fd os open foo txt os O RDWR os O CREAT str this is fujieace com test str str encode 添加转换方法 encode 即可
  • 【技巧】pycharm中Debug过程中跳过for/while循环

    先在for while循环结束后的一句打上断点即可 再找到左侧绿色按钮
  • kali之MS08-067漏洞复现

    MS08 067漏洞复现 漏洞简介 MicrosoftWindows是美国微软 Microsoft 公司发布的一系列操作系统 Windows的Server服务在处理特制RPC请求时存在缓冲区溢出漏洞 远程攻击者可以通过发送恶意的RPC请求触
  • java中设计模式之装饰模式(结构型模式)

    什么是装饰模式 装饰模式 Decorator Pattern 是一种结构型设计模式 它允许你在不改变已有对象结构的情况下 动态地向对象添加新的功能 装饰模式利用组合和继承的方式 通过创建包装对象来包裹原始对象 以增强其功能 这样可以在不修改
  • - 模块“VPMC“启动失败,未能启动虚拟机?

    模块 VPMC 启动失败 未能启动虚拟机 原因 该主机的CPU类型问题 它不支持虚拟化性能计数器 可通过右击虚拟机 打开设置进行处理 解决方法 右击虚拟机 设置 选择处理器 虚拟化引擎中的三个框全部去 重启虚拟机 也有可能是没有开启主机虚拟
  • linux centos7清除系统日志、历史记录、登录信息

    平时不管是web还是系统产生的日志都可能导致洗盘爆满 所以我在这里分享一些基本常用清理linux日志的方法 echo gt var log wtmp 清除用户登录记录 echo gt var log btmp 清除尝试登录记录 echo g
  • scrapy-splash java,scrapy-splash简单使用详解

    1 scrapy splash是scrapy的一个组件 scrapy splash加载js数据基于Splash来实现的 Splash是一个Javascrapy渲染服务 它是一个实现HTTP API的轻量级浏览器 Splash是用Python
  • 【node】- npm install时报错:npm WARN enoent ENOENT: no such file or directory

    npm install g koa 时报错如下所示 npm WARN enoent ENOENT no such file or directory 项目目录中没有package json 解决方法 在cmd命令行中输入 npm confi
  • 基于STM32单片机的停车场系统

    一 系统设计 本次停车场系统的设计使用STM32单片机为主控 通过光电检测模块检测车位 检测到数据后通过ESP8266通信模块上传到上位机 检测到车辆时则判断车位被占用并自动计算停车费和空余车位 二 硬件设计 本设计所采用的STM32F10
  • sqli-labs——保姆级1~22闯关详解

    目录 Less 1 GET Error based Single quotes String 错误的GET单引号字符串型注入 Less 2 GET Error based intiger based 错误的GET数值型注入 Less 3 G
  • Windows如何安装linux子系统

    很多用windows的开发人员其实非常羡慕Mac用户可以在Mac上直接使用linux命令安装软件和操作计算机的 现在windows 10以上的系统也支持安装一个linux子系统 方便个人测试使用 让你不再需要安装虚拟机也能做linux的测试
  • Github上优秀的开源小程序汇总

    Github上优秀的开源小程序汇总 有什么小程序适合个人开发 工具类的小程序非常适合个人开发 用云开发模式开发成本很低 能够快速上线 唯一的缺点是个人无法接入支付 变现渠道受限 目前只能通过流量主变现 见过一个在职的朋友利用业余时间实现小程
  • 苹果手机显示没有连接服务器怎么办啊,苹果手机更新连接到服务器出现问题怎么办...

    1 我的苹果手机验证失败 下面显示连接到服务器出现问题 怎么办 验证失败 连接到服务器时出现问题 一般是由于网络连接出现异常或者手机系统出错导致的 更换手机当前连接网络信号 比如 将无线网络切换至手机数据 或者是断开网络输入密码进行重新连接
  • XSS-labs 1-13关通关攻略

    目录 通杀 认真 第一关 无过滤 第二关 尖号内xss 第三关 过滤 lt gt 第四关 与第三关一致 只是单引号变成双引号 第五关 a标签 第六关 大小写绕过 第七关 双写绕过 第八关 unicode编码绕过 第九关 白名单绕过 第十关
  • python接口自动化之自动发送测试报告邮件

    目录 目录 前言 smtp授权 发送邮件 封装及应用 总结 前言 SMTP Simple Mail Transfer Protocol 也就是简单邮件传输协议 是一种提供可靠且有效电子邮件传输的协议 python的smtplib模块就提供了
  • Integer值比较

    包装类与基本数据类型 包装类是将基本数据类型封装成一个类 包含属性和名称 使用 在使用过程中 会涉及到自动装箱和自动拆箱 装箱 将基本数据类型转换成包装类 Integer i Integer valueOf a 装箱 拆箱 将包装类转换成基
  • 内部本地、内部全局与外部本地、外部全局

    关于内部本地地址 内部全局地址 外部本地地址 外部全局地址 有些童鞋可能一下子理解起来有些困难 分不清这四者的区别与联系 下面结合自己的经验解释一下 如有理解不对的地方 希望大家指正 先来看看这个术语的概念 1 内部局部地址 在内部网上分配
  • Elasticsearch2.x 全文检索之——文档匹配度

    什么是文档匹配度 在ES中执行一个搜索请求在默认情况下搜索的结果集是按照匹配度倒序排列 但是什么是文档匹配度 它是如何被计算的呢 每个文档的匹配度评分在es中被表示为一个浮点型的正数 score 文档的 score评分越高 文档与搜索词的匹
  • Unity中的简单数据存储办法

    这段代码演示了Unity中的简单数据存储办法 当涉及到不同类型的存储时 下面是一些示例代码来演示在Unity中如何使用不同的存储方法 1 临时存储示例代码 内存变量 csharp 定义一个静态变量来存储临时计分 public static
  • 使用浏览器插件修改request请求header头

    文章目录 前言 一 插件结构 二 代码 1 插件配置项 2 功能代码 项目地址 总结 前言 最近遇到了一个疑似header头引发的bug 需要修改header头来验证 于是写了个插件来实现 一 插件结构 浏览器插件相关的东西我这里就不说了