美好的一天,
我正在尝试将mitmproxy实现为更大的应用程序。 为此,我需要能够在我的代码中加载那些所谓的内联脚本,而不是通过命令行。我在文档中找不到任何有用的信息。
我使用的是mitmproxy版本0.17和Python 2.7。
我知道有一个更新版本可用,但是那个没有使用代码示例。
这是我的基本代码:
from mitmproxy import controller, proxy
from mitmproxy.proxy.server import ProxyServer
class ProxyMaster(controller.Master):
def __init__(self, server):
controller.Master.__init__(self, server)
def run(self):
try:
return controller.Master.run(self)
except KeyboardInterrupt:
self.shutdown()
def handle_request(self, flow):
flow.reply()
def handle_response(self, flow):
flow.reply()
config = proxy.ProxyConfig(port=8080)
server = ProxyServer(config)
m = ProxyMaster(server)
m.run()
如何使用内联脚本运行此代理?
提前致谢
答案 0 :(得分:0)
我想出了一个非常丑陋的解决方法。
我不得不使用controller.Master,而是使用flow.FlowMaster作为controller.Master lib似乎无法处理内联脚本。
由于某些原因,只是加载文件不起作用,它们会立即触发,但不能通过运行匹配的钩子来触发。
我没有使用不起作用的钩子,而是加载了匹配函数,你可以在handle_response中看到(缺少try / except并且线程可能很有用)
from mitmproxy import flow, proxy
from mitmproxy.proxy.server import ProxyServer
import imp
class ProxyMaster(flow.FlowMaster):
def run(self):
try:
return flow.FlowMaster.run(self)
except KeyboardInterrupt:
self.shutdown()
def handle_request(self, flow):
flow.reply()
def handle_response(self, flow):
for inline_script in self.scripts:
script_file = imp.load_source("response", inline_script.filename)
script_file.response(self, flow)
flow.reply()
proxy_config = proxy.ProxyConfig(port=8080)
server = ProxyServer(proxy_config)
state = flow.State()
m = ProxyMaster(server, state)
m.load_script("upsidedowninternet.py")
m.load_script("add_header.py")
m.run()
任何关于以正确的方式做到这一点的想法都会受到赞赏。