趣文网 > 作文大全

爬虫必备!传说中最pythonic的第三方库“requests”源码阅读

2020-12-31 05:05:02
相关推荐

本文将继续分享requests库源码阅读,主要内容为0.2.0版本爬虫必备!传说中最pythonic的第三方库“requests”源码阅读到0.3.0版本的进化历程,目的是学习大神是如何优化自己的项目以及对项目的态度,下面开始。

01

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接口的测试

02

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处理器),具体代码如下

03

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类属性集中。

04

v0.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号发布的,可见得,大神对项目的激情相当高涨!

05

v0.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网站保持友好的沟通……时不时的会分享一些提高效率的编程小技巧,在实际应用中遇到的问题以及解决方案,或者源码的阅读等等,欢迎大家一起来讨论!如果觉得写得还不错,欢迎关注点赞,谢谢。

阅读剩余内容
网友评论
相关内容
延伸阅读
小编推荐

大家都在看

那件小事激励着我作文600 学会面对作文 跳大绳的作文 我的周末的作文 常回家看看作文 游记700字初中作文 最美学生作文 沙漠化英语作文 美妙的秋天作文 新同学作文500字 文化传承的作文素材 我不再天真作文600字 乌龟写作文 摘西瓜作文 以竹子喻人的作文 大声说不作文 关于把握机会的作文 白鹭作文 我爱篮球作文 秋天的作文200个字 风采少年作文 介绍冰心的作文 士不可以不弘毅作文 我调皮的妹妹作文 英语作文如何写好 七年级作文第一单元 盼望春节作文400字 家有喜事作文500字 关于勇气的作文结尾 关于豆芽的作文