最后
Python崛起并且风靡,因为优点多、应用领域广、被大牛们认可。学习 Python 门槛很低,但它的晋级路线很多,通过它你能进入机器学习、数据挖掘、大数据,CS等更加高级的领域。Python可以做网络应用,可以做科学计算,数据分析,可以做网络爬虫,可以做机器学习、自然语言处理、可以写游戏、可以做桌面应用…Python可以做的很多,你需要学好基础,再选择明确的方向。这里给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!
👉Python所有方向的学习路线👈
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
👉Python必备开发工具👈
工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。
👉Python全套学习视频👈
我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。
👉实战案例👈
学python就与学数学一样,是不能只看书不做题的,直接看步骤和答案会让人误以为自己全都掌握了,但是碰到生题的时候还是会一筹莫展。
因此在学习python的过程中一定要记得多动手写代码,教程只需要看一两遍即可。
👉大厂面试真题👈
我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
需要这份系统化学习资料的朋友,可以戳这里获取
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
设置成功之后,我们只需要在手机浏览器上访问任意的网页或浏览任意的App即可。例如在手机上打开百度,mitmproxy页面便会呈现出手机上的所有请求,如下图所示。
这就相当于之前我们在浏览器开发者工具监听到的浏览器请求,在这里我们借助于mitmproxy完成。Charles完全也可以做到。
这里是刚才手机打开百度页面时的所有请求列表,左下角显示的2/38代表一共发生了38个请求,当前箭头所指的是第二个请求。
每个请求开头都有一个GET或POST,这是各个请求的请求方式。紧接的是请求的URL。第二行开头的数字就是请求对应的响应状态码,后面是响应内容的类型,如text/html代表网页文档、image/gif代表图片。再往后是响应体的大小和响应的时间。
当前呈现了所有请求和响应的概览,我们可以通过这个页面观察到所有的请求。
如果想查看某个请求的详情,我们可以敲击回车,进入请求的详情页面,如下图所示。
可以看到Headers的详细信息,如Host、Cookies、User-Agent等。
最上方是一个Request、Response、Detail的列表,当前处在Request这个选项上。这时我们再点击TAB键,即可查看这个请求对应的响应详情,如下图所示。
最上面是响应头的信息,下拉之后我们可以看到响应体的信息。针对当前请求,响应体就是网页的源代码。
这时再敲击TAB键,切换到最后一个选项卡Detail,即可看到当前请求的详细信息,如服务器的IP和端口、HTTP协议版本、客户端的IP和端口等,如下图所示。
mitmproxy还提供了命令行式的编辑功能,我们可以在此页面中重新编辑请求。敲击e键即可进入编辑功能,这时它会询问你要编辑哪部分内容,如Cookies、Query、URL等,每个选项的第一个字母会高亮显示。敲击要编辑内容名称的首字母即可进入该内容的编辑页面,如敲击m即可编辑请求的方式,敲击q即可修改GET请求参数Query。
这时我们敲击q,进入到编辑Query的页面。由于没有任何参数,我们可以敲击a来增加一行,然后就可以输入参数对应的Key和Value,如下图所示。
这里我们输入Key为wd,Value为NBA。
然后再敲击esc键和q键,返回之前的页面,再敲击e和p键修改Path。和上面一样,敲击a增加Path的内容,这时我们将Path修改为s,如下图所示。
再敲击esc和q键返回,这时我们可以看到最上面的请求链接变成了:https://www.baidu.com/s?wd=NBA。访问这个页面,可以看到百度搜索NBA关键词的搜索结果,如下图所示。
敲击a保存修改,敲击r重新发起修改后的请求,即可看到上方请求方式前面多了一个回旋箭头,这说明重新执行了修改后的请求。这时我们再观察响应体内容,即可看到搜索NBA的页面结果的源代码,如下图所示。
以上内容便是mitmproxy的简单用法。利用mitmproxy,我们可以观察到手机上的所有请求,还可以对请求进行修改并重新发起。
Fiddler、Charles也有这个功能,而且它们的图形界面操作更加方便。那么mitmproxy的优势何在?
mitmproxy的强大之处体现在它的另一个工具mitmdump,有了它我们可以直接对接Python对请求进行处理。下面我们来看看mitmdump的用法。
六、mitmdump的使用
mitmdump是mitmproxy的命令行接口,同时还可以对接Python对请求进行处理,这是相比Fiddler、Charles等工具更加方便的地方。有了它我们可以不用手动截获和分析HTTP请求和响应,只需写好请求和响应的处理逻辑即可。它还可以实现数据的解析、存储等工作,这些过程都可以通过Python实现。
- 实例引入
我们可以使用命令启动mitmproxy,并把截获的数据保存到文件中,命令如下所示:
mitmdump -w outfile
其中outfile的名称任意,截获的数据都会被保存到此文件中。
还可以指定一个脚本来处理截获的数据,使用-s参数即可:
mitmdump -s script.py
这里指定了当前处理脚本为script.py,它需要放置在当前命令执行的目录下。
我们可以在脚本里写入如下的代码:
我们定义了一个request()方法,参数为flow,它其实是一个HTTPFlow对象,通过request属性即可获取到当前请求对象。然后打印输出了请求的请求头,将请求头的User-Agent修改成了MitmProxy。
运行之后我们在手机端访问http://httpbin.org/get,可以看到如下情况发生。
手机端的页面显示如下图所示。
PC端控制台输出如下图所示。
手机端返回结果的Headers实际上就是请求的Headers,User-Agent被修改成了mitmproxy。PC端控制台输出了修改后的Headers内容,其User-Agent的内容正是mitmproxy。
所以,通过这三行代码我们就可以完成对请求的改写。print()方法输出结果可以呈现在PC端控制台上,可以方便地进行调试。
- 日志输出
mitmdump提供了专门的日志输出功能,可以设定不同级别以不同颜色输出结果。我们把脚本修改成如下内容:
这里调用了ctx模块,它有一个log功能,调用不同的输出方法就可以输出不同颜色的结果,以方便我们做调试。例如,info()方法输出的内容是白色的,warn()方法输出的内容是黄色的,error()方法输出的内容是红色的。运行结果如下图所示。
不同的颜色对应不同级别的输出,我们可以将不同的结果合理划分级别输出,以更直观方便地查看调试信息。
- Request
最开始我们实现了request()方法并且对Headers进行了修改。下面我们来看看Request还有哪些常用的功能。我们先用一个实例来感受一下。
我们修改脚本,然后在手机上打开百度,即可看到PC端控制台输出了一系列的请求,在这里我们找到第一个请求。控制台打印输出了Request的一些常见属性,如URL、Headers、Cookies、Host、Method、Scheme等。输出结果如下图所示。
结果中分别输出了请求链接、请求头、请求Cookies、请求Host、请求方法、请求端口、请求协议这些内容。
同时我们还可以对任意属性进行修改,就像最初修改Headers一样,直接赋值即可。例如,这里将请求的URL修改一下,脚本修改如下所示:
手机端得到如下结果,如下图所示。
比较有意思的是,浏览器最上方还是呈现百度的URL,但是页面已经变成了httpbin.org的页面了。另外,Cookies明显还是百度的Cookies。我们只是用简单的脚本就成功把请求修改为其他的站点。通过这种方式修改和伪造请求就变得轻而易举。
通过这个实例我们知道,有时候URL虽然是正确的,但是内容并非是正确的。我们需要进一步提高自己的安全防范意识。
Request还有很多属性,在此不再一一列举。更多属性可以参考:http://docs.mitmproxy.org/en/latest/scripting/api.html。
只要我们了解了基本用法,会很容易地获取和修改Reqeust的任意内容,比如可以用修改Cookies、添加代理等方式来规避反爬。
- Response
对于爬虫来说,我们更加关心的其实是Response的内容,因为Response Body才是爬取的结果。对于Response来说,mitmdump也提供了对应的处理接口,就是response()方法。下面我们用一个实例感受一下。
学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!
一、Python所有方向的学习路线
Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
二、学习软件
工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。
三、全套PDF电子书
书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。
四、入门学习视频
我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。
五、实战案例
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
六、面试资料
我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化学习资料的朋友,可以戳这里获取
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化学习资料的朋友,可以戳这里获取