如何使用 mitmproxy 修改 JSON 响应正文

riw*_*558 3 python networking python-3.x mitmproxy

当我向特定网站 API 发送请求时,我收到此响应

{
  "Tickets": [
    {
      "ticketAvailable": true,
...
Run Code Online (Sandbox Code Playgroud)

我将如何拦截并更改ticketAvailablefalse而不是true使用 mitmproxy?

from mitmproxy import ctx
from mitmproxy import http
import json

def response(flow: http.HTTPFlow) -> None:
    if flow.request.pretty_url == "https://example.com/api/v1/something":
        data = json.loads(flow.response.get_text())
        data["data"]["Tickets"]["ticketAvailable"] = false
        flow.response.text = json.dumps(data)
Run Code Online (Sandbox Code Playgroud)

我已经尝试过这个,但似乎不起作用。

编辑:尚未设法修复它

from mitmproxy import ctx
from mitmproxy import http
import json

def response(flow: http.HTTPFlow) -> None:
    if flow.request.pretty_url == "https://example.com/api/v1/something":
        data = json.loads(flow.response.get_text())
        data["Tickets"][0]["ticketAvailable"] = "false"
        flow.response.text = json.dumps(data)
Run Code Online (Sandbox Code Playgroud)

riw*_*558 5

我想出了一个办法来解决它。我只是简单地flow.request.pretty_url改为flow.request.pretty_url.endswith

from mitmproxy import ctx
from mitmproxy import http
import json

def response(flow: http.HTTPFlow) -> None:
    if flow.request.pretty_url.endswith("/something"):
        data = json.loads(flow.response.get_text())
        data["Tickets"][0]["ticketAvailable"] = False
        flow.response.text = json.dumps(data)
Run Code Online (Sandbox Code Playgroud)