Swagger2自定义添加请求头key-value暴力猴插件

Posted 抓手

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Swagger2自定义添加请求头key-value暴力猴插件相关的知识,希望对你有一定的参考价值。

效果

 

 直接在页面上添加请求头的key-value,就可以在请求中携带请求头。

暴力猴插件代码

// ==UserScript==
// @name        Swagger Headers Injection
// @name:zh-CN  Swagger Headers 注入
// @namespace   https://github.com/liuycy
// @include      *://**/swagger-ui*
// @grant       GM_setValue
// @grant       GM_getValue
// @require     https://cdn.jsdelivr.net/npm/vue@2.6.12/dist/vue.min.js
// @require     https://cdn.jsdelivr.net/npm/lodash@4.17.21/lodash.min.js
// @version     2.0.0
// @author      liuycy
// ==/UserScript==

!(function () 
  var FETCH = unsafeWindow.fetch
  var XHR_SEND = XMLHttpRequest.prototype.send
  
  function resetHeader(headers) 
    Object.defineProperty(unsafeWindow, 'fetch', 
      value: function() 
        const options = arguments[1] || 
        options.headers =  ...options.headers, ...headers 
        arguments[1] = options
        return FETCH.apply(this, arguments)
      
    )
    
    XMLHttpRequest.prototype.send = function() 
      for (const key in headers) this.setRequestHeader(key, headers[key])
      return XHR_SEND.apply(this, arguments)
    
  
  
  function renderHeaderTable($info) 
    var $header = $info.querySelector('#headers-table')
    if ($header) $header.remove()
    
    Vue.component('add-icon', 
      template: `<svg v-once t="1617866353541" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1882" width="25" height="25"><path d="M512 85.333333c235.648 0 426.666667 191.018667 426.666667 426.666667s-191.018667 426.666667-426.666667 426.666667S85.333333 747.648 85.333333 512 276.352 85.333333 512 85.333333z m0 64C311.701333 149.333333 149.333333 311.701333 149.333333 512s162.368 362.666667 362.666667 362.666667 362.666667-162.368 362.666667-362.666667S712.298667 149.333333 512 149.333333z m0 128a32 32 0 0 1 32 32v170.645334l170.666667 0.021333a32 32 0 0 1 0 64l-170.688-0.021333 0.021333 170.688a32 32 0 0 1-64 0l-0.021333-170.688-170.645334 0.021333a32 32 0 0 1 0-64l170.666667-0.021333V309.333333A32 32 0 0 1 512 277.333333z" fill="#333333" p-id="1883"></path></svg>`
    )
    Vue.component('del-icon', 
      template: `<svg v-once t="1617866380222" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1882" width="25" height="25"><path d="M512 85.333333c235.648 0 426.666667 191.018667 426.666667 426.666667s-191.018667 426.666667-426.666667 426.666667S85.333333 747.648 85.333333 512 276.352 85.333333 512 85.333333z m0 64C311.701333 149.333333 149.333333 311.701333 149.333333 512s162.368 362.666667 362.666667 362.666667 362.666667-162.368 362.666667-362.666667S712.298667 149.333333 512 149.333333z m202.666667 330.666667a32 32 0 0 1 0 64h-405.333334a32 32 0 0 1 0-64h405.333334z" fill="#333333" p-id="1883"></path></svg>`
    )
    
    var headerTable = new Vue(
      template: `
      <div id="headers-table">
        <p>自定义请求头: 请在下方填写 key-value 形式的请求头</p>
        <div v-for="(item, i) in headers" :key="i" style="display: grid; gap: 10px; grid-template-columns: 150px auto 25px 25px; margin-top: 5px;">
          <input v-model="item.key" placeholder="header key" />
          <input v-model="item.value" placeholder="header value" />
          <del-icon @click.native="handleDel(i)" />
          <add-icon @click.native="handleAdd" v-if="i === headers.length - 1" />
        </div>
      </div>
      `,
      data() 
        return  headers: GM_getValue('headersList', []) 
      ,
      methods: 
        handleDel(i) 
          this.headers.splice(i, 1)
          if (!this.headers.length) this.handleAdd()
        ,
        handleAdd() 
          this.headers.push()
        
      ,
      watch: 
        headers: 
          handler: _.debounce(function(list) 
            GM_setValue('headersList', list)
            
            var headersMap = list.reduce((map, item) => 
              if (item.key) map[item.key] = item.value
              return map
            , )
            
            resetHeader(headersMap)
          , 200),
          deep: true,
          immediate: true
        
      
    ).$mount()
    
    $info.insertBefore(headerTable.$el, null)
  
  
  function init() 
    var observer = new MutationObserver(() => 
      var $info = document.querySelector('.information-container .info')
      
      if ($info) 
        observer.disconnect()
        renderHeaderTable($info)
      
    ) 
    
    observer.observe(document.querySelector('#swagger-ui'), 
      childList: true,
      subtree: true
    )
  
  
  function wrapper(type) 
    var origin = history[type];
    return function() 
      var event = new Event(type)
      event.arguments = arguments
      window.dispatchEvent(event)
      return origin.apply(this, arguments)
    
  
  
  history.pushState = wrapper('pushState')
  history.replaceState = wrapper('replaceState')
  
  window.addEventListener('replaceState', init)
  window.addEventListener('pushState', init)
  window.addEventListener('load', init)
  
)()

以上是关于Swagger2自定义添加请求头key-value暴力猴插件的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot 自定义 Swagger2 请求 URL 路径的两种方法

c# webService 自定义soap头??急急急

TypeScript 在 Express 中添加自定义请求标头

自定义请求头引起预检请求

ajax添加请求头(添加Authorization字段)

[nginx]日志中记录自定义请求头