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 相关文章推荐
Python解释执行原理分析
Aug 22 Python
python调用java模块SmartXLS和jpype修改excel文件的方法
Apr 28 Python
Python中的变量和作用域详解
Jul 13 Python
pandas按若干个列的组合条件筛选数据的方法
Apr 11 Python
Python实现判断一行代码是否为注释的方法
May 23 Python
解决python os.mkdir创建目录失败的问题
Oct 16 Python
详解Python数据分析--Pandas知识点
Mar 23 Python
PyCharm2019安装教程及其使用(图文教程)
Sep 29 Python
Django框架序列化与反序列化操作详解
Nov 01 Python
python 求10个数的平均数实例
Dec 16 Python
Python能做什么
Jun 02 Python
Python实现快速大文件比较代码解析
Sep 04 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
JS与PHP向函数传递可变参数的区别实例代码
2011/05/18 PHP
无JS,完全php面向过程数据分页实现代码
2012/08/27 PHP
php基于curl扩展制作跨平台的restfule 接口
2015/05/11 PHP
php根据日期显示所在星座的方法
2015/07/13 PHP
laravel如何开启跨域功能示例详解
2017/08/31 PHP
Javascript中暂停功能的实现代码
2007/03/04 Javascript
javascript 常用关键字列表集合
2007/12/04 Javascript
JS判断不同分辨率调用不同的CSS样式文件实现思路及测试代码
2013/01/23 Javascript
THREE.JS入门教程(1)THREE.JS使用前了解
2013/01/24 Javascript
百度移动版的url编码解码示例
2014/04/29 Javascript
Bootstrap 布局组件(全)
2016/07/18 Javascript
JavaScript字符集编码与解码详谈
2017/02/02 Javascript
Nodejs+Socket.io实现通讯实例代码
2017/02/13 NodeJs
jquery.masonry瀑布流效果
2017/05/25 jQuery
Angular js 实现添加用户、修改密码、敏感字、下拉菜单的综合操作方法
2017/10/24 Javascript
vue框架中props的typescript用法详解
2020/02/17 Javascript
Nuxt pages下不同的页面对应layout下的页面布局操作
2020/11/05 Javascript
[06:24]DOTA2亚洲邀请赛小组赛第三日 TOP10精彩集锦
2015/02/01 DOTA
python获取糗百图片代码实例
2013/12/18 Python
详解Python中的__new__()方法的使用
2015/04/09 Python
使用PyCharm配合部署Python的Django框架的配置纪实
2015/11/19 Python
python实现几种归一化方法(Normalization Method)
2019/07/31 Python
pygame实现俄罗斯方块游戏(AI篇1)
2019/10/29 Python
python 实现turtle画图并导出图片格式的文件
2019/12/07 Python
django rest framework serializer返回时间自动格式化方法
2020/03/31 Python
python+opencv实现车道线检测
2021/02/19 Python
DERMAdoctor官网:美国著名皮肤护理品牌
2019/07/06 全球购物
俄罗斯大型在线书店:Читай-город
2019/10/10 全球购物
研发工程师的岗位职责
2013/11/18 职场文书
课前三分钟演讲稿
2014/04/24 职场文书
2014年安全生产大检查方案
2014/05/13 职场文书
乡镇党员干部群众路线对照检查材料思想汇报
2014/09/28 职场文书
考生诚信考试承诺书
2015/04/29 职场文书
MySQL的Query Cache图文详解
2021/07/01 MySQL
一条 SQL 语句执行过程
2022/03/17 MySQL
Golang实现可重入锁的示例代码
2022/05/25 Golang