Mitmproxy 在一个脚本中篡改 GET 和 POST 请求/响应
Mitmproxy tampering with GET and POST request/ response in one script
发送给某个 URL (http://test.com
) 的 POST 请求如下所示:
{
"messageType": "OK",
"city": {
"Name": "Paris",
"Views": {
"1231": {
"id": 4234,
"enableView": false
},
},
"Views": [5447, 8457],
"messages": [{
"id": "message_6443",
"eTag": 756754338
}]
},
"client": {
"Id": 53,
"email": "test@test.us",
"firstName": "test",
"lastName": "test",
"id": 52352352,
"uuid": "5631f-grdeh4",
"isAdmin": false
}
}
我需要拦截请求并将isAdmin
更改为true。
并且对某个 URL (https://test.com/profiles/{Random_Numbers}/{id}
) 的 GET 请求有一个像这样的(编码的)响应:
{
"id": 0,
"Code": "Admin",
"display": "RRRR"
}
我需要将 id
更改为 5。
所以基本上我需要编写一个脚本来执行这两个操作。
到目前为止,我已经尝试利用 GitHub 上的一些示例,但到目前为止我还没有得到它:
from libmproxy.protocol.http import decoded
def start(context, argv):
if len(argv) != 3:
raise ValueError('Usage: -s "modify-response-body.py old new"')
context.old, context.new = argv[1], argv[2]
def response(context, flow):
with decoded(flow.response): # automatically decode gzipped responses.
flow.response.content = flow.response.content.replace(context.old, context.new)`
如何为我的场景实现此功能?
也许使用 libmproxy 来获取 http 请求和响应是一个更好的主意。
您发布的脚本和 Python 的 JSON 模块应该会让您走得更远:
def response(context, flow):
if flow.request.url == "...": # optionally filter based on some criteria...
with decoded(flow.response): # automatically decode gzipped responses.
data = json.loads(flow.response.content)
data["foo"] = "bar"
flow.response.content = json.dumps(data)
发送给某个 URL (http://test.com
) 的 POST 请求如下所示:
{
"messageType": "OK",
"city": {
"Name": "Paris",
"Views": {
"1231": {
"id": 4234,
"enableView": false
},
},
"Views": [5447, 8457],
"messages": [{
"id": "message_6443",
"eTag": 756754338
}]
},
"client": {
"Id": 53,
"email": "test@test.us",
"firstName": "test",
"lastName": "test",
"id": 52352352,
"uuid": "5631f-grdeh4",
"isAdmin": false
}
}
我需要拦截请求并将isAdmin
更改为true。
并且对某个 URL (https://test.com/profiles/{Random_Numbers}/{id}
) 的 GET 请求有一个像这样的(编码的)响应:
{
"id": 0,
"Code": "Admin",
"display": "RRRR"
}
我需要将 id
更改为 5。
所以基本上我需要编写一个脚本来执行这两个操作。
到目前为止,我已经尝试利用 GitHub 上的一些示例,但到目前为止我还没有得到它:
from libmproxy.protocol.http import decoded
def start(context, argv):
if len(argv) != 3:
raise ValueError('Usage: -s "modify-response-body.py old new"')
context.old, context.new = argv[1], argv[2]
def response(context, flow):
with decoded(flow.response): # automatically decode gzipped responses.
flow.response.content = flow.response.content.replace(context.old, context.new)`
如何为我的场景实现此功能?
也许使用 libmproxy 来获取 http 请求和响应是一个更好的主意。
您发布的脚本和 Python 的 JSON 模块应该会让您走得更远:
def response(context, flow):
if flow.request.url == "...": # optionally filter based on some criteria...
with decoded(flow.response): # automatically decode gzipped responses.
data = json.loads(flow.response.content)
data["foo"] = "bar"
flow.response.content = json.dumps(data)