爬虫必备!传说中最pythonic的第三方库“requests”源码阅读
本文将继续分享requests库源码阅读,主要内容为0.2.0版本爬虫必备!传说中最pythonic的第三方库“requests”源码阅读到0.3.0版本的进化历程,目的是学习大神是如何优化自己的项目以及对项目的态度,下面开始。
v0.2.1版本
0.2.0到0.2.1的版本其实主要就做了一件事情,就是让requests库支持了文件的上传。我们看下版本的commit信息
0.2.1 (2011-02-14)++++++++++++++++++# 为程序post和put接口添加文件上传的方法* Added file attribute to POST and PUT requests for multipart-encode file uploads.# 给Request增加了url属性(ps:感觉作者写错了呢,应该是给Response增加了)* Added Request.url attribute for context and redirects
文件上传的实现
至于文件接口,则是作者调用了另一个大神的第三方库完成的。现在研究这个库意义不大,因为当前的版本已经不再使用这个库了。你需要了解的就是:通过对第三方接口的调用,封装在了自己的post和put方法中,完成了文件的上传功能。我们来看下代码
增加了红色部分的逻辑,就是对第三方库进行接口调用,所以我们在写项目的时候,可以研究研究别人已经写好的功能,如果优秀,直接拿来用,非常方便
测试post
增加了对post接口的测试
v0.2.2版本
我们看下此版本更新了哪些内容
* Still handles request in the event of an HTTPError. (Issue #2)# 增加了eventlet通信机制* Eventlet and Gevent Monkeypatch support.# 增加了cookie的支持* Cookie Support (Issue #1)
至于monkey_patch()可以理解为对python原生文件打补丁,该方法对某些系统模块进行全局打补丁,使其对Greenthread友好。默认对所有模块(如代码所示)打补丁
cookie支持
cookie的支持是基于urllib2标准库的HTTPCookieProcessor类实现的,增加对cookie处理的处理器(多了一个专门处理Cookie的Request处理器),具体代码如下
v0.2.3版本
0.2.3版本变化不大,主要时对错误机制进行了一些调优,看下作者的commit信息
* New HTTPHandling Methods- Reponse.__nonzero__ (false if bad HTTP Status)# 增加了Response类ok和error属性 - Response.ok (True if expected HTTP Status) - Response.error (Logged HTTPError if bad HTTP Status)# 异常处理 - Reponse.raise_for_status() (Raises stored HTTPError)
Response属性的变更
原来是直接在Request中对请求成功与否做出判断,现在是封装到Response类中,来判断是否接收到响应,相当于优化,对Response类属性集中。
04v0.2.4版本
0.2.4版本最主要干的事情就一个,对Request类进行了优化,使接口(比如get/post)内部调用更加的简单,且更符合现代人的编码习惯,按照惯例,看下作者的提交信息
0.2.4 (2011-02-15)* Python 2.5 Support* PyPy-c v1.4 Support* Auto-Authentication tests* Improved Request object constructor
Request的优化
原来是这个样子
优化之后的样子
这应该才是我们正常人创建一个类的写法吧,传参,赋值。所以说,大神也是慢慢进化过来的。
到了这个版本才2.19号,而第一个版本是2.14号发布的,可见得,大神对项目的激情相当高涨!
05v0.3.0版本
0.2.4之后就是大版本0.3.0了,本此内容更新如下
0.3.0 (2011-02-25)# 自动化权限验证* Automatic Authentication API Change* Smarter Query URL Parameterization# 允许同时对文件和数据上传* Allow file uploads and POST data together# 新的权限认证系统* New Authentication Manager System- Simpler Basic HTTP System - Supports all build-in urllib2 Auths - Allows for custom Auth Handlers
认证相关
修改成了自动化认证, 而且是单例模式,这个类做了一个认证信息的存储和获取,也就是说,当你第二次请求时,如果没有给auth, 会默认从这个类实例中获取认证信息(这应该是从urllib2中拿出来用的,修改了点点
支持文件和数据同时上传
将数据更新到文件内容中,一并上传
说到这,本此本版的变化基本就说完了,可以看出来的是,大神对于项目的专注和认真,以及项目是如何一点一点进行优化的。
本章<完>!
我是一名奋战在编程界的pythoner,工作中既要和数据打交道,也要和erp系统,web网站保持友好的沟通……时不时的会分享一些提高效率的编程小技巧,在实际应用中遇到的问题以及解决方案,或者源码的阅读等等,欢迎大家一起来讨论!如果觉得写得还不错,欢迎关注点赞,谢谢。