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里disconnect UDP套接字的方法
Apr 23 Python
python实现判断数组是否包含指定元素的方法
Jul 15 Python
python实现txt文件格式转换为arff格式
May 31 Python
python实现录音小程序
Oct 26 Python
PyCharm+Qt Designer+PyUIC安装配置教程详解
Jun 13 Python
详解python深浅拷贝区别
Jun 24 Python
python实现PID算法及测试的例子
Aug 08 Python
用python3 urllib破解有道翻译反爬虫机制详解
Aug 14 Python
python+pygame实现坦克大战
Sep 10 Python
Python通过kerberos安全认证操作kafka方式
Jun 06 Python
利用Matlab绘制各类特殊图形的实例代码
Jul 16 Python
Django数据库(SQlite)基本入门使用教程
Jul 07 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 数组入门教程小结
2009/05/20 PHP
打造超酷的PHP数据饼图效果实现代码
2011/11/23 PHP
Yii中的relations数据关联查询及统计功能用法详解
2016/07/14 PHP
php json中文编码为null的解决办法
2016/12/14 PHP
jquery监控数据是否变化(修正版)
2011/04/12 Javascript
通过JS获取用户本地图片路径并显示的代码
2012/02/16 Javascript
Jquery实现仿新浪微博获取文本框能输入的字数代码
2013/02/22 Javascript
js弹出窗口之弹出层的小例子
2013/06/17 Javascript
jQuery scroll事件实现监控滚动条分页示例
2014/04/04 Javascript
js实现拖拽效果
2015/02/12 Javascript
Javascript aop(面向切面编程)之around(环绕)分析
2015/05/01 Javascript
JS库之ParticlesJS使用简介
2017/09/12 Javascript
详解node.js中的npm和webpack配置方法
2018/01/21 Javascript
jQuery实现的简单对话框拖动功能示例
2018/06/05 jQuery
JavaScript中 ES6变量的结构赋值
2018/07/10 Javascript
vue使用ajax获取后台数据进行显示的示例
2018/08/09 Javascript
通过实例讲解JS如何防抖动
2019/06/15 Javascript
[02:09]2018DOTA2亚洲邀请赛TNC赛前采访
2018/04/04 DOTA
跟老齐学Python之有容乃大的list(3)
2014/09/15 Python
Java分治归并排序算法实例详解
2017/12/12 Python
Python+selenium 获取一组元素属性值的实例
2018/06/22 Python
Python多图片合并PDF的方法
2019/01/03 Python
Python 二叉树的层序建立与三种遍历实现详解
2019/07/29 Python
pytorch获取vgg16-feature层输出的例子
2019/08/20 Python
Python 字符串类型列表转换成真正列表类型过程解析
2019/08/26 Python
python实现的Iou与Giou代码
2020/01/18 Python
Pycharm 跳转回之前所在页面的操作
2021/02/05 Python
css3 线性渐变和径向渐变示例附图
2014/04/08 HTML / CSS
canvas简易绘图的实现(海绵宝宝篇)
2018/07/04 HTML / CSS
Vita Fede官网:在意大利手工制作,在纽约市设计
2019/10/25 全球购物
教师节商场活动方案
2014/02/13 职场文书
没有孩子的离婚协议书怎么写
2014/09/17 职场文书
2015年秋季小班开学寄语
2015/05/27 职场文书
重阳节简报
2015/07/20 职场文书
学习经验交流会演讲稿
2015/11/02 职场文书
技术入股合作协议书
2016/03/21 职场文书