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 21 Python
Python格式化压缩后的JS文件的方法
Mar 05 Python
Python json模块使用实例
Apr 11 Python
Python下载指定页面上图片的方法
May 12 Python
解决Python字典写入文件出行首行有空格的问题
Sep 27 Python
python实现小球弹跳效果
May 10 Python
Django之创建引擎索引报错及解决详解
Jul 17 Python
Python 多线程搜索txt文件的内容,并写入搜到的内容(Lock)方法
Aug 23 Python
Python上下文管理器全实例详解
Nov 12 Python
tensorflow之读取jpg图像长和宽实例
Jun 18 Python
Python实现滑雪小游戏
Sep 25 Python
python_tkinter弹出对话框创建
Mar 20 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
ZF框架实现发送邮件的方法
2015/12/03 PHP
详解PHP序列化和反序列化原理
2018/01/15 PHP
PHP 实现文件压缩解压操作的方法
2019/06/14 PHP
使用Jquery Aajx访问WCF服务(GET、POST、PUT、DELETE)
2012/03/16 Javascript
js选项卡的实现方法
2015/02/09 Javascript
JavaScript实现格式化字符串函数String.format
2016/12/16 Javascript
基于jquery实现二级联动效果
2017/03/30 jQuery
MUI 实现侧滑菜单及其主体部分上下滑动的方法
2018/01/25 Javascript
vue通过路由实现页面刷新的方法
2018/01/25 Javascript
vue响应式更新机制及不使用框架实现简单的数据双向绑定问题
2019/06/27 Javascript
微信小程序开发之转发分享功能
2019/10/22 Javascript
原生js实现自定义滚动条
2021/01/20 Javascript
[55:03]LGD vs EG 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
python读取浮点数和读取文本文件示例
2014/05/06 Python
Python 基础教程之闭包的使用方法
2017/09/29 Python
python绘制简单折线图代码示例
2017/12/19 Python
对python中dict和json的区别详解
2018/12/18 Python
Python OpenCV 使用滑动条来调整函数参数的方法
2019/07/08 Python
django做form表单的数据验证过程详解
2019/07/26 Python
logging level级别介绍
2020/02/21 Python
Pycharm内置终端及远程SSH工具的使用教程图文详解
2020/03/19 Python
浅谈python处理json和redis hash的坑
2020/07/16 Python
python如何将图片转换素描画
2020/09/08 Python
python从PDF中提取数据的示例
2020/10/30 Python
为你的html5网页添加音效示例
2014/04/03 HTML / CSS
AVON雅芳官网:世界上最大的美容化妆品公司之一
2016/11/02 全球购物
介绍一下grep命令的使用
2012/06/28 面试题
工程造价专业求职信
2014/07/17 职场文书
2014年仓库管理员工作总结
2014/11/18 职场文书
银行员工考核评语
2014/12/31 职场文书
面试感谢信范文
2015/01/22 职场文书
开会迟到检讨书范文
2015/05/06 职场文书
2019年幼儿园家长接送责任书
2019/10/29 职场文书
聊聊pytorch测试的时候为何要加上model.eval()
2021/05/23 Python
使用Python+OpenCV进行卡类型及16位卡号数字的OCR功能
2021/08/30 Python
Java实现给Word文件添加文字水印
2022/02/15 Java/Android