使用浏览器插件修改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头 的相关文章

随机推荐

  • 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头来验证 于是写了个插件来实现 一 插件结构 浏览器插件相关的东西我这里就不说了