來源: 阅读赏析:- 2021-04-01 07:39:11
pip install mitmproxy
在Python环境中安装使用pip最为简洁。mitmproxy安装完成以后会包含三个工具:mitmproxy、mitmdump、mitmweb。安装完成以后直接在控制台输入mitmproxy --version就可以查看版本信息。
查看版本信息
Error: mitmproxy's console interface is not supported on Windows. You can run mitmdump or mitmweb instead.
在Windows系统化中我们都注意适用的是安装使用完后后的另两人方法mitmdump和mitmweb。from mitmproxy import httpfrom mitmproxy import ctxdef response(flow: http.HTTPFlow): """ flow为参数,后面跟http.HTTPFlow表示声明其类型, 这样在IDE中就可以自动提示其属性和方法,这是Python为我们提供的一种 便携的方式,尤其是对外提供接口时,可以告知参数类型,这种方式是可选 的,当然你也可以使用常用方式,即不知道参数类型,只写参数名即可 """ ctx.log.info(flow.request.url) ctx.log.warn(flow.request.headers)
mitmproxy.ctx.log为mitmproxy为公司出具的运行日志打印出方案。from mitmproxy import httpclass Counter: def __init__(self): self.num = 0 def request(self, flow: http.HTTPFlow): self.num += 1 print("We've seen %d flows" % self.num) print(flow.request.url) print(flow.request.query)addons = [ Counter()]
官方正品举荐采用的类的的方法,底下的码应该让大家特别迷惘,尽管是采用的类的方法或者指数函数公式的方法def reqeust指数函数公式全是在mitmdump外部乖离率指标函数的时候赋值的,mitmdump便是采用的种案例真相乖离率指标函数的的方法,为咱们的具备了数据文件流的操作步骤的方法,那一方面咱们的要了解mitmproxy为咱们的具备的案例真相(咱们的只关注度HTTP有关系的案例真相)。class Events: def request(self, flow: http.HTTPFlow): """ The full HTTP request has been read. """ def response(self, flow: http.HTTPFlow): """ The full HTTP response has been read. """
request为标准上传至功能器前的选股数学函数公式,如何他们大家都想对上传给功能器的标准做修改游戏,还可以你在里做操作。response为功能器将标准数值退回对他们大家都时的选股数学函数公式,我也即使他们大家都网络爬虫到的数值,你在里他们大家都还可以对数值做操作,做入仓操作。大家在爬取中在使用mitmproxy,具体可以说是对Request和Response对方通过操作方式方法,那么你在源码中把对照的的特性和方式方法都找弄出来,充当关联性,就可作为是字典一件来网上查询必须。源码在GitHub上使用,线路为:mitmproxy/net/http/request.py和mitmproxy/net/http/response.py。flow.request.cookies #获取请求的cookiesflow.request.headers # 获取所有头信息,包含Host、User-Agent、Content-type等字段flow.request.url # 完整的请求地址,包含域名及请求参数,但是不包含放在body里面的请求参数flow.request.host # 域名flow.request.method # 请求方式。POST、GET等flow.request.scheme # 请求类型 ,如 http、httpsflow.request.path # 请求的路径,url除域名之外的内容flow.request.text # 请求中body内容,可以获取某些请求的参数,返回字典类型flow.request.replace() # 使用正则替换content中的内容flow.request.query # 返回MultiDictView类型的数据,url直接带的键值参数,一般是GET请求的参数flow.request.content # bytes,结果如flow.request.textflow.request.raw_content # bytes,结果如flow.request.get_content()flow.request.urlencoded_form # MultiDictView,content-type:application/x-www-form-urlencoded 时的请求参数,不包含url直接带的键值参数flow.request.multipart_form # MultiDictView,content-type:multipart/form-data 时的请求参数,不包含url直接带的键值参数
flow.response.status_code # 状态码flow.response.text # 返回内容,已解码flow.response.content # 返回内容,二进制flow.response.cookies # 返回的cookiesflow.response.headers # 返回的请求头flow.response.replace() # 使用正则替换content中的内容
要十分提前准备,反回值为字典的型号的,不不错简单在操控台彩打,不错的使用str突显,或是安装字典方案做转换。以上为测试英文范例:from mitmproxy import httpclass Demo1: def request(self, flow: http.HTTPFlow): print('request url', flow.request.url) print('request name', flow.request.query.get('name')) print('request age', flow.request.query.get('age')) flow.request.query['name'] = 'yuehan'class Demo2: def response(self, flow: http.HTTPFlow): print('response name', flow.request.query.get('name'))addons = [ Demo1(), Demo2()]
示例中使用两个类Demo1、Demo2,主要是为大家展示类方式的好处,即可以使用多个类,每个类处理进行独立的逻辑处理,每个类当中都可以同时使用request、response函数,希望不要因为例子里面而误导了大家。下面再说一点进阶用法,每一个处理类,都可以单独写一个py文件,再统一定义一个py文件,导入处理类,定义一个列表变量addons,变量中存储所有处理类的实例,示例如下:demo1.py
from mitmproxy import httpclass Demo1: def request(self, flow: http.HTTPFlow): print('request url', flow.request.url) print('request name', flow.request.query.get('name')) print('request age', flow.request.query.get('age')) flow.request.query['name'] = 'yuehan'
demo2.pyfrom mitmproxy import httpclass Demo2: def response(self, flow: http.HTTPFlow): print('response name', flow.request.query.get('name'))
spider.pyimport demo1import demo2addons = [ demo1.Demo1(), demo2.Demo2()]
参考文章:
1.使用 mitmproxy + python 做拦截代理 //blog.wolfogre.com/posts/usage-of-mitmproxy/
2.是怎样的强化网站凯时最新首页登录对selenium的屏幕 //blog.csdn.net/qq_26877377/article/details/83307208免责声明及提醒:此文内容为本网所转载企业宣传资讯,该相关信息仅为宣传及传递更多信息之目的,不代表本网站观点,文章真实性请浏览者慎重核实!任何投资加盟均有风险,提醒广大民众投资需谨慎!