PS:今天上午,非常郁闷,有很多简略基础的问题搞得我有些迷茫,哎,代码几天不写就忘。目前又不当COO,还是得用心记代码哦!
ref: http://dancallahan.info/journal/python-requests/
在HTTP关相处置中应用python是不必要的费事,这括包urllib2块模以伟大的庞杂性价值取获综合性的功能。比拟于urllib2,Kenneth Reitz的Requests块模更能约简的持支整完的简略用例。
简略的例子:
设想下我们试图应用get方法从http://example.test/取获源资并且查看返回代码,content-type头信息,还有response的体主内容。这件事无论应用urllib2 或者Requests都是很轻易现实的。
>>> import urllib2 >>> url = 'http://example.test/' >>> response = urllib2.urlopen(url) >>> response.getcode() 200 >>> response.headers.getheader('content-type') 'text/html; charset=utf-8' >>> response.read() 'Hello, world!'
>>> import requests >>> url = 'http://example.test/' >>> response = requests.get(url) >>> response.status_code 200 >>> response.headers['content-type'] 'text/html; charset=utf-8' >>> response.content u'Hello, world!'
这两种方法很似相,于对相urllib2调用方法读取response中的属性信息,Requests则是应用属性名来取获对应的属性值。
两者还有两个微细但是很主要的差异:
1 Requests 动自的把返回信息有Unicode解码
2 Requests 动自保存了返回内容,所以你可以读取多次,而不像urllib2.urlopen()那样返回的只是一个似类文件类型只能读取一次的象对。
第二点是在python交互式环境
下
操作代码很令人讨厌的事件
当初让我们实验下庞杂点得例子:应用GET方法取获http://foo.test/secret的源资,此次须要基本的http验证。应用下面的代码作为板模,像好我们只要把urllib2.urlopen() 到requests.get()之间的代码换成可以发送username,password的求请了行就
>>> import urllib2 >>> url = 'http://example.test/secret' >>> password_manager = urllib2.HTTPPasswordMgrWithDefaultRealm() >>> password_manager.add_password(None, url, 'dan', 'h0tdish') >>> auth_handler = urllib2.HTTPBasicAuthHandler(password_manager) >>> opener = urllib2.build_opener(auth_handler) >>> urllib2.install_opener(opener) >>> response = urllib2.urlopen(url) >>> response.getcode() 200 >>> response.read() 'Welcome to the secret page!'
一个简略的方法中实例化了2个类,然后组建了第三个类,最后还要装载到全局的urllib2块模中,最后才调用了urlopen,那么那两个庞杂的类是什么的
困惑了吗, 这里全部urllib2的档文 http://docs.python.org/release/2.7/library/urllib2.html
那Requests是怎么样处理样同的问题的呢?
>>> import requests >>> url = 'http://example.test/secret' >>> response = requests.get(url, auth=('dan', 'h0tdish')) >>> response.status_code 200 >>> response.content u'Welcome to the secret page!'
只是在调用方法的时候增加了一个auth关键字数函
我敢赌钱你用不查档文也能记着。
Requests对错误的处置也是很非常方面。如果你应用了不正确的用户名和密码,urllib2会发引一个urllib2.URLError错误,然而Requests会像你期望的那样返回一个常正的response象对。需只查看response.ok的布尔值便可以道知否是陆登功成。
>>> response = requests.get(url, auth=('dan', 'wrongPass')) >>> response.ok False
* Requests对于HEAD, POST, PUT, PATCH, 和 DELETE方法的api样同简略
* 它可以处置多部份上传,样同持支动自转码
* 档文更好
* 还有更多
Requests 是很好的,下次须要应用HTTP时候可以试试。
链接:
http://python-requests.org/
http://pypi.python.org/pypi/requests
文章结束给大家分享下程序员的一些笑话语录: 不会,Intel会维持高利润,也会维持竞争局面,国外的竞争不是打死对方的那种。你看日本有尼康,佳能,索尼,都做相机,大家都过得很滋润。别看一堆厂,其实真正控制的是后面的那几个财团——有些竞争对手,后面其实是一家人。