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


前言

最近遇到了一个疑似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


总结

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值