2022-07-18 22:58:02 +08:00
|
|
|
|
/*
|
|
|
|
|
Surge 脚本实现 Qx 的 response-body、和request-body 重写类型
|
|
|
|
|
|
|
|
|
|
如 Qx:
|
|
|
|
|
https://service.ilovepdf.com/v1/user url response-body false response-body true
|
|
|
|
|
|
|
|
|
|
可改写为 Surge:
|
|
|
|
|
[Script]
|
|
|
|
|
test = type=http-response,pattern=https://service.ilovepdf.com/v1/user,requires-body=1,script-path=https://raw.githubusercontent.com/mieqq/mieqq/master/replace-body.js, argument=false->true
|
|
|
|
|
|
|
|
|
|
argument=要匹配值=作为替换的值
|
|
|
|
|
支持正则:如argument=\w+->test
|
|
|
|
|
支持正则修饰符:如argument=/\w+/g->test
|
|
|
|
|
支持多参数,如:argument=匹配值1->替换值1&匹配值2->替换值2
|
|
|
|
|
|
|
|
|
|
支持改写响应体和请求体体(type=http-response 或 http-request)注意必须打开需要body(requires-body=1)
|
|
|
|
|
|
|
|
|
|
tips
|
|
|
|
|
修改json格式的键值对可以这样:
|
|
|
|
|
argument=("key")\s?:\s?"(.+?)"->$1: "new_value"
|
|
|
|
|
|
|
|
|
|
s修饰符可以让.匹配换行符,如 argument=/.+/s->hello
|
|
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
function getRegexp(re_str) {
|
|
|
|
|
let regParts = re_str.match(/^\/(.*?)\/([gims]*)$/);
|
|
|
|
|
if (regParts) {
|
|
|
|
|
return new RegExp(regParts[1], regParts[2]);
|
|
|
|
|
} else {
|
|
|
|
|
return new RegExp(re_str);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2022-12-03 10:47:08 +08:00
|
|
|
|
let body;
|
2022-07-18 22:58:02 +08:00
|
|
|
|
if (typeof $argument == "undefined") {
|
2022-12-03 10:47:08 +08:00
|
|
|
|
console.log("requires $argument");
|
2022-07-18 22:58:02 +08:00
|
|
|
|
} else {
|
|
|
|
|
if ($script.type === "http-response") {
|
|
|
|
|
body = $response.body;
|
|
|
|
|
} else if ($script.type === "http-request") {
|
|
|
|
|
body = $request.body;
|
|
|
|
|
} else {
|
2022-12-03 10:47:08 +08:00
|
|
|
|
console.log("script type error");
|
2022-07-18 22:58:02 +08:00
|
|
|
|
}
|
2022-12-03 10:47:08 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (body) {
|
2022-07-18 22:58:02 +08:00
|
|
|
|
$argument.split("&").forEach((item) => {
|
|
|
|
|
let [match, replace] = item.split("->");
|
|
|
|
|
let re = getRegexp(match);
|
|
|
|
|
body = body.replace(re, replace);
|
|
|
|
|
});
|
|
|
|
|
$done({ body });
|
2022-12-03 10:47:08 +08:00
|
|
|
|
} else {
|
|
|
|
|
console.log("Not Modify");
|
|
|
|
|
$done({});
|
2022-07-18 22:58:02 +08:00
|
|
|
|
}
|
2022-12-03 10:47:08 +08:00
|
|
|
|
|