python中requests模块的使用方法


Posted in Python onApril 08, 2015

本文实例讲述了python中requests模块的使用方法。分享给大家供大家参考。具体分析如下:

在HTTP相关处理中使用python是不必要的麻烦,这包括urllib2模块以巨大的复杂性代价获取综合性的功能。相比于urllib2,Kenneth Reitz的Requests模块更能简约的支持完整的简单用例。

简单的例子:

想象下我们试图使用get方法从http://example.test/获取资源并且查看返回代码,content-type头信息,还有response的主体内容。这件事无论使用urllib2 或者Requests都是很容易实现的。

urllib2 

>>> 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!'

Requests

>>> 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的请求就行了

这是urllib2的方法:

>>> 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是怎么样解决同样的问题的呢?

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关键字函数
我敢打赌你不用查文档也能记住。

错误处理 Error Handling

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时候可以试试。

希望本文所述对大家的Python程序设计有所帮助。

Python 相关文章推荐
在Python3中使用asyncio库进行快速数据抓取的教程
Apr 02 Python
python分析作业提交情况
Nov 22 Python
彻底搞懂Python字符编码
Jan 23 Python
Python遍历文件夹 处理json文件的方法
Jan 22 Python
Python3.5面向对象程序设计之类的继承和多态详解
Apr 24 Python
弄懂这56个Python使用技巧(轻松掌握Python高效开发)
Sep 18 Python
Python使用贪婪算法解决问题
Oct 22 Python
Python3 xml.etree.ElementTree支持的XPath语法详解
Mar 06 Python
python应用Axes3D绘图(批量梯度下降算法)
Mar 25 Python
30行Python代码实现高分辨率图像导航的方法
May 22 Python
python pymysql链接数据库查询结果转为Dataframe实例
Jun 05 Python
Python的flask接收前台的ajax的post数据和get数据的方法
Apr 12 Python
介绍Python中几个常用的类方法
Apr 08 #Python
python自然语言编码转换模块codecs介绍
Apr 08 #Python
python文件写入实例分析
Apr 08 #Python
python uuid模块使用实例
Apr 08 #Python
Python HTMLParser模块解析html获取url实例
Apr 08 #Python
python内存管理分析
Apr 08 #Python
Python中关于字符串对象的一些基础知识
Apr 08 #Python
You might like
PHP自动更新新闻DIY
2006/10/09 PHP
PHP中防止SQL注入实现代码
2011/02/19 PHP
Linux(CentOS)下PHP扩展PDO编译安装的方法
2016/04/07 PHP
火狐浏览器(firefox)下获得Event对象以及keyCode
2008/11/13 Javascript
jQuery EasyUI API 中文文档 - ComboGrid 组合表格
2011/10/13 Javascript
JS 实现Json查询的方法实例
2013/04/12 Javascript
jQuery toggleClass应用实例(附效果图)
2014/04/06 Javascript
JavaScript把数组作为堆栈使用的方法
2015/03/20 Javascript
javascript多行字符串的简单实现方式
2015/05/04 Javascript
JavaScript实现文字跟随鼠标特效
2015/08/06 Javascript
使用JQuery实现的分页插件分享
2015/11/05 Javascript
比较常见的javascript中定义函数的区别
2015/11/09 Javascript
基于jquery实现下拉框美化特效
2016/02/02 Javascript
json传值以及ajax接收详解
2016/05/24 Javascript
Canvas实现放射线动画效果
2017/02/15 Javascript
原生JS实现图片网格式渐显、渐隐效果
2017/06/05 Javascript
vue2.0 keep-alive最佳实践
2017/07/06 Javascript
Angular4自制一个市县二级联动组件示例
2017/11/21 Javascript
vue点击input弹出带搜索键盘并监听该元素的方法
2018/08/25 Javascript
详解微信小程序scroll-view横向滚动的实践踩坑及隐藏其滚动条的实现
2019/03/14 Javascript
ES6数组与对象的解构赋值详解
2019/06/14 Javascript
超简单的微信小程序轮播图
2019/11/22 Javascript
JS中准确判断变量类型的方法
2020/06/01 Javascript
JavaScript实现简单日历效果
2020/09/11 Javascript
[42:52]IG vs VGJ.T 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
python实现哈希表
2014/02/07 Python
Python3 集合set入门基础
2020/02/10 Python
如何理解Python中的变量
2020/06/01 Python
Python环境配置实现pip加速过程解析
2020/11/27 Python
应届生护士求职信
2013/11/01 职场文书
资料员岗位职责
2013/11/17 职场文书
人事专员职责
2014/02/22 职场文书
会计岗位说明书
2014/07/29 职场文书
2014年社区矫正工作总结
2014/11/18 职场文书
KTV员工管理制度
2015/08/06 职场文书
《梅花魂》教学反思
2016/02/18 职场文书