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

浏览器请求拦截

window.XMLHttpRequest 对象的重写

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

whistle

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