#python #reverse-proxy #mitmproxy
Вопрос:
Есть ли способ запустить mitmproxy v.7.0. 2 программно в фоновом режиме? ProxyConfig и ProxyServer были удалены с версии 7.0.0, и приведенный ниже код не работает.
from mitmproxy.options import Options
from mitmproxy.proxy.config import ProxyConfig
from mitmproxy.proxy.server import ProxyServer
from mitmproxy.tools.dump import DumpMaster
import threading
import asyncio
import time
class Addon(object):
def __init__(self):
self.num = 1
def request(self, flow):
flow.request.headers["count"] = str(self.num)
def response(self, flow):
self.num = self.num 1
flow.response.headers["count"] = str(self.num)
print(self.num)
# see source mitmproxy/master.py for details
def loop_in_thread(loop, m):
asyncio.set_event_loop(loop) # This is the key.
m.run_loop(loop.run_forever)
if __name__ == "__main__":
options = Options(listen_host='0.0.0.0', listen_port=8080, http2=True)
m = DumpMaster(options, with_termlog=False, with_dumper=False)
config = ProxyConfig(options)
m.server = ProxyServer(config)
m.addons.add(Addon())
# run mitmproxy in backgroud, especially integrated with other server
loop = asyncio.get_event_loop()
t = threading.Thread( target=loop_in_thread, args=(loop,m) )
t.start()
# Other servers, such as a web server, might be started then.
time.sleep(20)
print('going to shutdown mitmproxy')
m.shutdown()
Ответ №1:
Вы можете ввести свой Addon
класс, your_script.py
а затем запустить mitmdump -s your_script.py
его . mitmdump поставляется без консольного интерфейса и может работать в фоновом режиме.
Мы (разработчики mitmproxy) официально больше не поддерживаем ручное создание экземпляров из Python, потому что это создает для нас огромное бремя поддержки. Если у вас есть некоторый опыт работы с Python, вы, вероятно, сможете найти свой путь.
Что делать, если у моего аддона есть дополнительные зависимости?
Подход 1: pip install mitmproxy
по-прежнему отлично поддерживается и обеспечивает ту же функциональность, что и автономные двоичные файлы. Бонусный совет: Вы можете запустить venv/bin/mitmproxy
или venv/Scripts/mitmproxy.exe
вызвать mitmproxy в своем virtualenv без активации virtualenv.
Подход 2. Вы можете установить mitmproxy с pipx
помощью, а затем запустить pipx inject mitmproxy <your dependency name>
. Видишь https://docs.mitmproxy.org/stable/overview-installation/#installation-from-the-python-package-index-pypi для подробностей.
Как я могу отладить саму mitmproxy?
Если вы выполняете отладку из командной строки (будь то инструкции печати или pdb), самый простой подход-запустить mitmdump
вместо mitmproxy
, что обеспечивает ту же функциональность за вычетом интерфейса консоли. Кроме того, вы можете использовать функцию удаленной отладки PyCharm, которая также работает при активном интерфейсе консоли (https://github.com/mitmproxy/mitmproxy/blob/main/examples/contrib/remote-debug.py).
Комментарии:
1. Спасибо за комментарий. Если вашему собственному сценарию нужны другие библиотеки, которые вы обычно устанавливаете в виртуальной среде, как это рекомендуется сделать с помощью mitmproxy сейчас? Кроме того, есть ли еще какой-то способ написать код в графическом интерфейсе, таком как pycharm, и иметь доступ к отладчику?
2. Я расширил свой ответ, см. выше. 🙂