最近在使用mitmproxy,遇到了一些问题,记录一下,希望帮到有缘人,我的环境是win10专业版
-
问题1
pip install mitmproxy 后使用mitmdump --version报错
(py3_spider) F:\apps\interpreter>mitmdump --version Traceback (most recent call last): File "f:\apps\interpreter\python3.6.4\lib\runpy.py", line 193, in _run_module_as_main "__main__", mod_spec) File "f:\apps\interpreter\python3.6.4\lib\runpy.py", line 85, in _run_code exec(code, run_globals) File "F:\apps\interpreter\.virtualenv\py3_spider\Scripts\mitmdump.exe\__main__.py", line 4, in <module> File "f:\apps\interpreter\.virtualenv\py3_spider\lib\site-packages\mitmproxy\__init__.py", line 8, in <module> asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy()) AttributeError: module 'asyncio' has no attribute 'WindowsSelectorEventLoopPolicy'
问题原因
版本不兼容,pip install mitmproxy 默认安装最新版
解决方法
pip install mitmproxy==5.0.0, 问题解决
H:\use_mitmproxy>mitmdump --version Mitmproxy: 5.0.0 Python: 3.6.4 OpenSSL: OpenSSL 1.1.0j 20 Nov 2018 Platform: Windows-10-10.0.19041-SP0
-
问题2
cmd 命令行输入mitmdump -s demo1.py,提示No module named ‘mitmproxy_script’
H:\use_mitmproxy>mitmdump -s demo1.py Loading script ./demo1.py in script ./demo1.py: No module named '__mitmproxy_script__' Proxy server listening at http://*:8080
问题表现为,demo1.py中的脚本逻辑不会执行
问题原因
被调用脚本中有导入自己写的包,命令行调用脚本引起的导包路径不存在的问题
解决方法
在被调用的脚本中导入自己写的模块前,添加如下代码
import os, sys path = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) if path not in sys.path: sys.path.append(path) from use_mitmproxy.tables import zf_Token
最后一行是我自己的模块
-
问题3
脚本中监控的域名(网页),无响应内容,就像卡死了一样
问题原因
脚本
def request(self, flow: mitmproxy.http.HTTPFlow):
中写的有return 语句,阻止了请求,自然也就没有响应信息,就像下面这样#!/usr/bin/env python # -*- coding: utf-8 -*- import mitmproxy.http class Demo(): def request(self, flow: mitmproxy.http.HTTPFlow): if "www.baidu.com" in flow.request.url: print(flow.request.url) return pass def response(self, flow: mitmproxy.http.HTTPFlow): pass addons = [ Demo(), ]
可以参考,下面的文章中关于
针对 HTTP 生命周期
的介绍,里面讲的比较详细解决方法
删除return语句