【问题标题】:How to modify JSON response body with mitmproxy如何使用 mitmproxy 修改 JSON 响应正文
【发布时间】:2021-12-06 16:41:00
【问题描述】:

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

{
  "Tickets": [
    {
      "ticketAvailable": true,
...

如何使用 mitmproxy 拦截 ticketAvailable 并将其更改为 false 而不是 true

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)

我试过了,但是好像没用。

编辑:尚未设法修复它

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)

【问题讨论】:

    标签: python python-3.x networking mitmproxy


    【解决方案1】:

    我想出了一个办法来解决它。 我只是将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)
    

    【讨论】:

      【解决方案2】:

      Tickets 是一个数组,因此您需要访问数组中的第 0 个索引才能将 ticketAvailable 更新为 false。此外,响应正文中似乎没有 data 键,因此在导航字典的键时不需要 ["data"]

      另请注意,Python 中的布尔值是大写的,即TrueFalse,因此您应该使用本机 Python 布尔值(如果您实际上需要在其他地方使用 data 时很有用)或将 false 包装在引号(如果您只是将 data 加载回 JSON 中就好了,看起来就像是这样)。

      要么:

      data["Tickets"][0]["ticketAvailable"] = False
      

      或者:

      data["Tickets"][0]["ticketAvailable"] = "false"
      

      【讨论】:

      • 谢谢。我已经修复了你所说的一切,但它仍然不起作用。我已经在编辑中发布了我的新代码。我可以看到脚本已成功加载到 mitmproxy,但据我所知,它没有做任何事情。
      • 您如何检查更新步骤?您是否尝试过在更新前后打印data?你看到了什么?
      • 我设法找到了修复它的方法。检查我上面的答案。非常感谢您的帮助!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-01-19
      • 2019-01-20
      • 1970-01-01
      • 2016-04-10
      • 1970-01-01
      • 2015-07-25
      • 2015-09-21
      相关资源
      最近更新 更多