我正在使用mitmproxy,一个用于HTTP的python man-in-the-middle(MITM)代理,可以动态修改某个网站的HTTP请求。
目标:
出于测试目的,当它收到HTTP请求时,它应该保存它(它接收一个HTTPFlow对象),下次同一个请求将被发送时我需要重新发送完全相同的数据/ html / header / resourses / ecc .. 到浏览器。
问题:
显而易见的解决方案是序列化对象,但它不可序列化!
我不能简单地将其保留在内存中,因为我需要在测试期间重新启动代理
我能做些什么来实现我的目标?
详细信息:
我已经尝试了 pickle , cPickle 和 marshal ,但有以下错误:
定义__slots__但没有定义__getstate__的类无法被腌制
无法挑选CDataGCP对象
- ValueError:unmarshallable object
观:
答案 0 :(得分:0)
找到解决方案(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)