Requests的介绍:
最近在找代码看,在github上找到一个http的库,阅读了一部分api和源代码,此文记录下.
在python下,自带了urlib2的类似的库,但是作者觉得写的不好用,不够优雅,于是自己搞了个Requests出来.号称"HTTP FOR HUMAN",哈哈.
看基本的代码,的确要简洁很多.关于对比,在github上有一段有趣的讨论,可以看看.
https://gist.github.com/973705
话说,github是程序员的社区,可以多多关注.
文档重要内容记录:
文档链接:http://docs.python-requests.org/en/latest/
API:http://docs.python-requests.org/en/latest/api/
大部分看官方文档就可以了,写的很是清楚了.
例子中讲了get,post,options等操作.cookie,response的编码问题.
需要区分response.text和response.content的区别.
A session object has all the methods of the main Requests API.
Sessions can also be used to provide default data to the request methods.
s = requests.Session() s.auth = ('user', 'pass') s.headers.update({'x-test': 'true'}) # both 'x-test' and 'x-test2' are sent s.get('http://httpbin.org/headers', headers={'x-test2': 'true'})
Any dictionaries that you pass to a request method will be merged with the session-level values that are set. The method-level parameters override session parameters.
Requests.request方法返回的response对象中包含了创建的request.
通过stream,可以在拿到头的时候,判断是否要继续下载response的body部分.
代理的运用:
使用hook,可以在请求返回时,调用相应的function,这个跟ajax的回调类似.目前支持的钩子仅仅为response(即响应返回时)
自定义认证方式:
Any callable which is passed as the auth argument to a request method will have the opportunity to modify the request before it is dispatched.
作者关于Requests的演讲稿:http://python-for-humans.heroku.com/#1
其他知识点:
在阅读代码过程中,了解如何安装包(用pip或者easy_install命令,会直接下载安装),以及setup.py的作用.
以及__init__.py的作用是:表明此目录应该被作为一个package来处理,对于import很多package很有用.
源代码解读:
源代码才看完sessions.py相关的代码.后面等全部看完了,再做个总结.
Requests中的关于认证部分:
httpBasicAuth(基本认证):http://zh.wikipedia.org/wiki/HTTP%E5%9F%BA%E6%9C%AC%E8%AE%A4%E8%AF%81
HttpDegistAuth(摘要认证):http://zh.wikipedia.org/wiki/HTTP%E6%91%98%E8%A6%81%E8%AE%A4%E8%AF%81
两者的区别是安全性上,前者是提供明文的用户名密码信息.后者使用随机数,MD5加密以及qop等来指定加密级别.在Requests的代码中可以看到是按照该规范来进行实现的.