将来自特定 URL 的 body 响应保存到文件并使用 mitmproxy 对其进行解码

Save body response from specific URL to file and decode it using mitmproxy

我正在尝试使用 mitmdump 将来自“https://example.com/orders”的 body 响应保存并解码到文件中。我找到了一个只保存对文件的响应的脚本,但它似乎不适用于最新的 mitmproxy。

from mitmproxy.models import decoded
def response(context, flow):
 with decoded(flow.response):  # automatically decode gzipped responses.
    with open("body.txt","ab") as f:
        f.write(flow.response.content)

当我 运行 显示脚本错误消息时:

Script error: Traceback (most recent call last):
File "save_body.py", line 1, in <module>
from mitmproxy.models import decoded
ImportError: No module named 'mitmproxy.models'

我的操作系统和版本:

Mitmproxy version: 2.0.2 (release version) 
Python version: 3.5.2
Platform: Linux-4.10.0-28-generic-x86_64-with-Ubuntu-16.04-xenial
SSL version: OpenSSL 1.0.2g  1 Mar 2016
Linux distro: Ubuntu 16.04 xenial

如何将解码后的 body 仅从一个 URL(不包括其他 URL)保存到文件中?以及如何操作:如果来自 URL 的请求需要重复,我需要 mitmdump 来覆盖 "body.txt"?

我找到了一个解决方案,这个简单的 python 脚本将响应正文写入文件,如果请求重复 - 每次都会覆盖它。

import mitmproxy
def response(flow):
    if flow.request.pretty_url.endswith("example.com/orders"):
        with open("orders.html","wb") as f:
                f.write(flow.response.content)

将此脚本保存到 save_body.py 并与 mitmdump -s save_body.py 一起使用