浏览器请求拦截
对 window.XMLHttpRequest 对象的重写
- 拦截请求入参(通过修改send方法修改)
class XMLHttpRequestInter extends window.XMLHttpRequest {
constructor(){
super(...args);
}
send(...params){
const yourParams = [] //你的参数处理逻辑
// 发送你的参数
super.send(...yourParams)
}
}
window.XMLHttpRequest = XMLHttpRequestInter
- 拦截请求回来的数据
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 方法 |
:---------------------------------- |
拦截请求入参
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)
}
}
拦截响应数据
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
- 查看拦截界面:
http://local.whistlejs.com/
- 通过配置host进行抓包
- 请求体只能获取16k
- 参考地址:
http://wproxy.org/whistle/