老铁们,大家好,相信还有很多朋友对于手机抓包视频网站源码分享和手机app视频抓包的相关问题不太懂,没关系,今天就由我来为大家分享分享手机抓包视频网站源码分享以及手机app视频抓包的问题,文章篇幅可能偏长,希望可以帮助到大家,下面一起来看看吧!
我们通常使用的抓包工具就是Fiddler和Charles这种图形化的,Charles的优点是跨平台,Windows和Mac都可以使用,Fiddler的优点是功能“极其”强大,不仅拥有抓包功能,还拥有中间人攻击的功能,但是使用成本太高了,我们做爬虫开发,使用到Fiddler的功能不过十之二三罢了。今天我们主要讲的是mitmproxy这款工具,这是一款专业的中间人攻击工具,mitmproxy不仅可以截获请求帮助开发者查看、分析,最最重要的是支持Python进行定制化二次开发。例如:截获浏览器的请求内容,并将数据处理后存储到数据库,再将内容交给浏览器;如果出现异常时,发出邮件通知,并返回给浏览器一个空的页面。mitmproxy有以下几个特点:
像正常代理一样转发请求,保证服务器和客户端之间的通信可以拦截请求/返回,并可以修改请求/返回可以加载Python脚本执行
安装mitmproxy
pipinstallmitmproxy
在Python环境中安装使用pip最为简洁。mitmproxy安装完成以后会包含三个工具:mitmproxy、mitmdump、mitmweb。安装完成以后直接在控制台输入mitmproxy–version就可以查看版本信息。
查看版本信息
注意如果是在Windows系统中安装,需要先安装MicrosoftVisualC++V14.0以上版本,并且mitmproxy是不能在Windows系统中进行抓包的,在执行mitmproxy–version命令的时候会得到一个错误提示。
Error:mitmproxy&34;&34;\nflow为参数,后面跟http.HTTPFlow表示声明其类型,\n这样在IDE中就可以自动提示其属性和方法,这是Python为我们提供的一种\n便携的方式,尤其是对外提供接口时,可以告知参数类型,这种方式是可选\n的,当然你也可以使用常用方式,即不知道参数类型,只写参数名即可\n&34;&34;We&34;%self.num)\nprint(flow.request.url)\nprint(flow.request.query)\n\n\naddons=[\nCounter()\n]\n
官方推荐使用类的方式,上面的代码可能让你有点迷茫,无论是使用类方式还是函数方式defreqeust函数都是在mitmdump内部回调时会调用的,mitmdump就是使用这种事件回调的方式,为我们提供了数据流的操作方式,那首先我们要了解mitmproxy为我们提供的事件(我们只关注HTTP相关的事件)。
classEvents:\ndefrequest(self,flow:http.HTTPFlow):\n&34;&34;&34;\n\ndefresponse(self,flow:http.HTTPFlow):\n&34;&34;&34;\n
request为请求发送至服务器前的回调函数,如果我们想对发送给服务器的请求进行修改,可以在这里进行处理。response为服务器将请求数据返回给我们时的回调函数,这里就是我们爬取到的数据,在这里我们可以对数据进行处理,做入库处理。
我们在爬虫中使用mitmproxy,主要就是对Request和Response对象进行操作,下面我在源码中把对应的属性和方法都找出来,作为参考,就当作是字典一样来查询即可。源码在GitHub上下载,路径为:mitmproxy/net/http/request.py和mitmproxy/net/http/response.py。
Request
flow.request.cookies获取所有头信息,包含Host、User-Agent、Content-type等字段\nflow.request.url域名\nflow.request.method请求类型,如http、https\nflow.request.path请求中body内容,可以获取某些请求的参数,返回字典类型\nflow.request.replace()返回MultiDictView类型的数据,url直接带的键值参数,一般是GET请求的参数\nflow.request.contentbytes,结果如flow.request.get_content()\nflow.request.urlencoded_formMultiDictView,content-type:multipart/form-data时的请求参数,不包含url直接带的键值参数\n
Response
flow.response.status_code返回内容,已解码\nflow.response.content返回的cookies\nflow.response.headers使用正则替换content中的内容\n
要特别注意,返回值为字典的类型的,不能直接在控制台打印,可以使用str修饰,或者按照字典方式进行输出。
以下为测试示例:
测试代码
frommitmproxyimporthttp\n\n\nclassDemo1:\ndefrequest(self,flow:http.HTTPFlow):\nprint(&39;,flow.request.url)\nprint(&39;,flow.request.query.get(&39;))\nprint(&39;,flow.request.query.get(&39;))\nflow.request.query[&39;]=&39;\n\n\nclassDemo2:\ndefresponse(self,flow:http.HTTPFlow):\nprint(&39;,flow.request.query.get(&39;))\n\n\naddons=[\nDemo1(),\nDemo2()\n]\n
请求url:https://httpbin.org/get?name=jieke&age=23输出结果:
示例中使用两个类Demo1、Demo2,主要是为大家展示类方式的好处,即可以使用多个类,每个类处理进行独立的逻辑处理,每个类当中都可以同时使用request、response函数,希望不要因为例子里面而误导了大家。下面再说一点进阶用法,每一个处理类,都可以单独写一个py文件,再统一定义一个py文件,导入处理类,定义一个列表变量addons,变量中存储所有处理类的实例,示例如下:demo1.py
frommitmproxyimporthttp\n\nclassDemo1:\ndefrequest(self,flow:http.HTTPFlow):\nprint(&39;,flow.request.url)\nprint(&39;,flow.request.query.get(&39;))\nprint(&39;,flow.request.query.get(&39;))\nflow.request.query[&39;]=&39;\n
demo2.py
frommitmproxyimporthttp\n\nclassDemo2:\ndefresponse(self,flow:http.HTTPFlow):\nprint(&39;,flow.request.query.get(&39;))\n
spider.py
importdemo1\nimportdemo2\n\naddons=[\ndemo1.Demo1(),\ndemo2.Demo2()\n]\n
抓包命令mitmdump-p8888-sspider.py
参考文章:
1.使用mitmproxy+python做拦截代理https://blog.wolfogre.com/posts/usage-of-mitmproxy/
2.如何突破网站对selenium的屏蔽https://blog.csdn.net/qq_26877377/article/details/83307208
手机抓包视频网站源码分享和手机app视频抓包的问题分享结束啦,以上的文章解决了您的问题吗?欢迎您下次再来哦!