前端网络之:抓包,数据拦截,请求修改

浏览器请求拦截

对 window.XMLHttpRequest 对象的重写

  1. 拦截请求入参(通过修改send方法修改)
  class XMLHttpRequestInter extends window.XMLHttpRequest {
    constructor(){
      super(...args);
    }
    send(...params){
      const yourParams = [] //你的参数处理逻辑
      // 发送你的参数
      super.send(...yourParams)
    }
  }
  window.XMLHttpRequest = XMLHttpRequestInter
  1. 拦截请求回来的数据
  class XMLHttpRequestInter extends window.XMLHttpRequest {
    constructor(){
      super(...args);
    }
    open(...params){
      // 获取到请求url
      const url = params[1]
      // 你的判断逻辑
      ...
      //满足条件修改返回数据
      if(条件 === true){
        super.onreadystatechange = ()=>{
          if(this.readyState === 4 && this.status === 200){
            //获得返回值
            const res = super.response
            //你的数据
            const yourRes = ...
            this.response = yourRes
          }
        }
      }
      return super.open(...params)
    }
  }
  window.XMLHttpRequest = XMLHttpRequestInter

fiddler

方法名 描述 示例
FiddlerObject.alert(ebody) fiddler script alert 方法 :----------------------------------

拦截请求入参

  1. OnBeforeRequest(oSession:Session)
    方法名 描述 示例
    GetRequestBodyAsString 获取字符串形式的请求体 '[{"actionType":"initUser"}]'
    Fiddler.WebFormats.JSON.JsonDecode(GetRequestBodyAsString()) 将获取字符串形式的请求体转化为json [{"actionType":"initUser"}]
  function OnBeforeRequest(oSession){
    const rqbody = oSession.GetRequestBodyAsString()
    if(rqbody.Contains('your string')){
      //解析请求体为json 格式
      const rqbodyJSON = Fiddler.WebFormats.JSON.JsonDecode(rqbody)
      // 修改请求体参数
      rqbodyJSON.JSONObject["params"]["loginName"]= "new name"
      // 转换请求体为请求格式
      const rqbodyChanged = Fiddler.WebFormats.JSON.JsonEncode(rqbodyJSON.JSONObject)
      // 修改oSession 请求体
      oSession.utilSetRequestBody(rqbodyChanged)
    }
  }

拦截响应数据

  1. OnBeforeResponse(oSession:Session)
    方法名 描述 示例
    GetResponseBodyAsString 获取字符串形式的响应体 '[{"actionType":"initUser"}]'
    Fiddler.WebFormats.JSON.JsonDecode(GetResponseBodyAsString() 将获取字符串形式的请求体转化为json [{"actionType":"initUser"}]
  function OnBeforeResponse(oSession){
    const rsbody = oSession.GetResponseBodyAsString()
    if(rsbody.Contains('your string')){
      //解析响应数据为json 格式
      const rsbodyJSON = Fiddler.WebFormats.JSON.JsonDecode(rsbody)
      // 修改响应数据
      rsbodyJSON.JSONObject["proName"]= "new name"
      // 转换响应体为标准格式
      const rsbodyChanged = Fiddler.WebFormats.JSON.JsonEncode(rsbodyJSON.JSONObject)
      // 修改oSession 响应数据
      oSession.utilSetResponseBody(rqbodyChanged)
    }
  }

whistle

  1. 查看拦截界面:http://local.whistlejs.com/
  2. 通过配置host进行抓包
  3. 请求体只能获取16k
  4. 参考地址:http://wproxy.org/whistle/
上一篇
下一篇