【问题标题】:Python serialize HTTPFlow object (MITM)Python 序列化 HTTPFlow 对象(MITM)
【发布时间】:2016-09-25 17:21:57
【问题描述】:

我正在使用mitmproxy,一个用于 HTTP 的 python 中间人 (MITM) 代理,以动态修改某个网站的 HTTP 请求。

目标:

出于测试目的,当它接收到一个 HTTP 请求时,它应该保存它(它接收到一个HTTPFlow 对象),下次发出相同的请求时,我需要重新发送完全相同的 data/html /header/resources/ecc.. 到浏览器。

问题:

显而易见的解决方案是序列化对象,但它不可序列化

我不能简单地将其保存在内存中,因为我需要在测试期间重新启动代理

我可以做些什么来实现我的目标?

详情:

我已经尝试过 picklecPicklemarshal,但出现以下错误:

  • 定义了 __slots__ 而没有定义 __getstate__ 的类不能腌制

  • 无法腌制 CDataGCP 对象

  • ValueError:不可编组的对象

想法

  • 1) 更改原始对象使其可序列化有多大的坏处?我该怎么做?
  • 2) 如果主进程与第二个始终处于活动状态的 python 进程通信,该进程只是将对象保存在内存中,该怎么办? 他们还需要通信 obj 序列化它们吗?

【问题讨论】:

    标签: python serialization ipc mitmproxy


    【解决方案1】:

    找到解决方案(HTTPFlow obj 有获取状态的方法)

    进口

    from mitmproxy.models import HTTPFlow
    from mitmproxy.models import HTTPResponse
    

    保存状态:

    cached_state = http_flow_response.response.get_state()
    

    加载状态:

    # create the obj 
    http_response = HTTPResponse(
            cached_state['http_version'], # "HTTP/1.1"
            cached_state['status_code'],  # 200
            cached_state['reason'],       # "Ok"
            cached_state['headers'],      # Headers(content_type="...")
            cached_state['content'])      # str
    # send the obj
    http_flow_request.reply(cached_http_response)
    

    【讨论】:

      猜你喜欢
      • 2010-11-30
      • 1970-01-01
      • 2019-10-30
      • 2017-09-03
      • 2018-11-15
      • 1970-01-01
      • 1970-01-01
      • 2016-10-12
      • 1970-01-01
      相关资源
      最近更新 更多