我按照Mitmproxy github examples的建议运行代理:
from libmproxy import proxy, flow
class MitmProxy(flow.FlowMaster):
def run(self):
try:
flow.FlowMaster.run(self)
except KeyboardInterrupt:
self.shutdown()
def handle_request(self, r):
f = flow.FlowMaster.handle_request(self, r)
if f:
r.reply()
return f
def handle_response(self, r):
f = flow.FlowMaster.handle_response(self, r)
if f:
r.reply()
return f
config = proxy.ProxyConfig(
cacert = os.path.expanduser("~/.ssl/mitmproxy.pem")
)
state = flow.State()
server = proxy.ProxyServer(config, 8083)
m = MitmProxy(server, state)
try:
m.run()
except Exception, e:
print e.message
m.shutdown()
我想处理每个请求/响应而不阻塞其他请求/响应, 因为我需要使用并发装饰器和脚本
我的问题是:如何在此配置中运行的代理中加载和卸载脚本?
答案 0 :(得分:3)
您可以在脚本加载时使用并发模式 这是一种用于此类用途的example
我更喜欢在流程级别实现mitmproxy逻辑 您可以使用此代码
def handle_response(self, r):
reply = f.response.reply
f.response.reply = controller.DummyReply()
if hasattr(reply, "q"):
f.response.reply.q = reply.q
def run():
pass
threading.Thread(target=run)
答案 1 :(得分:0)
您基本上必须复制handle_concurrent_reply在libmproxy.script
中的工作方式f = flow.FlowMaster.handle_request(self,r)
if f:
def run():
request.reply() #if you forget this you'll end up in a loop and never reply
threading.Thread(target=run).start() #this will start run