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笔记(1) 关于我们应不应该继续学习python
Oct 24 Python
Python访问纯真IP数据库脚本分享
Jun 29 Python
python实现按行切分文本文件的方法
Apr 18 Python
Python在图片中添加文字的两种方法
Apr 29 Python
使用pandas把某一列的字符值转换为数字的实例
Jan 29 Python
Python使用numpy模块实现矩阵和列表的连接操作方法
Jun 26 Python
Python协程操作之gevent(yield阻塞,greenlet),协程实现多任务(有规律的交替协作执行)用法详解
Oct 14 Python
Python应用实现双指数函数及拟合代码实例
Jun 19 Python
Python join()函数原理及使用方法
Nov 14 Python
Python的logging模块基本用法
Dec 24 Python
详解Python中__new__方法的作用
Mar 31 Python
基于PyQt5制作一个群发邮件工具
Apr 08 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基于rabbitmq操作类的生产者和消费者功能示例
2018/06/16 PHP
Node.js入门教程:在windows和Linux上安装配置Node.js图文教程
2014/08/14 Javascript
JQuery右键菜单插件ContextMenu使用指南
2014/12/19 Javascript
jQuery获取选中单选按钮radio的值
2016/12/27 Javascript
bootstrap paginator分页前后台用法示例
2017/06/17 Javascript
基于JavaScript实现前端数据多条件筛选功能
2020/08/19 Javascript
JavaScript寄生组合式继承实例详解
2018/01/06 Javascript
Vue封装Swiper实现图片轮播效果
2018/02/06 Javascript
浅谈手写node可读流之流动模式
2018/06/01 Javascript
深入浅析var,let,const的异同点
2018/08/07 Javascript
微信小程序实现简单评论功能
2018/11/28 Javascript
Vue加载json文件的方法简单示例
2019/01/28 Javascript
koa2服务端使用jwt进行鉴权及路由权限分发的流程分析
2019/07/22 Javascript
jqGrid表格底部汇总、合计行footerrow处理
2019/08/21 Javascript
详解node和ES6的模块导出与导入
2020/02/19 Javascript
Python实现发送email的几种常用方法
2014/08/18 Python
Python中的闭包实例详解
2014/08/29 Python
python结合selenium获取XX省交通违章数据的实现思路及代码
2016/06/26 Python
Python读csv文件去掉一列后再写入新的文件实例
2017/12/28 Python
Python实现PS滤镜碎片特效功能示例
2018/01/24 Python
Python unittest单元测试框架总结
2018/09/08 Python
python 检查文件mime类型的方法
2018/12/08 Python
pyqt5实现俄罗斯方块游戏
2019/01/11 Python
Python3 pandas 操作列表实例详解
2019/09/23 Python
tensorflow自定义激活函数实例
2020/02/04 Python
如何基于python对接钉钉并获取access_token
2020/04/21 Python
区分python中的进程与线程
2020/08/13 Python
UGG雪地靴荷兰官网:UGG荷兰
2016/09/09 全球购物
中科软测试工程师面试题
2012/06/16 面试题
英语专业学生的自我评价
2013/12/30 职场文书
小班评语大全
2014/05/04 职场文书
自查自纠工作情况报告
2014/10/29 职场文书
办公室个人总结
2015/02/28 职场文书
python基础入门之普通操作与函数(三)
2021/06/13 Python
Android 界面一键变灰 深色主题工具类
2022/04/28 Java/Android
GO中sync包自由控制并发示例详解
2022/08/05 Golang