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写的Discuz7.2版faq.php注入漏洞工具
Aug 06 Python
Python中多线程thread与threading的实现方法
Aug 18 Python
python使用cPickle模块序列化实例
Sep 25 Python
Python简单实现enum功能的方法
Apr 25 Python
python 矩阵增加一行或一列的实例
Apr 04 Python
使用pandas批量处理矢量化字符串的实例讲解
Jul 10 Python
Python实现字符串匹配的KMP算法
Apr 04 Python
Python中Numpy mat的使用详解
May 24 Python
Python实现银行账户资金交易管理系统
Jan 03 Python
Python selenium文件上传下载功能代码实例
Apr 13 Python
python使用tkinter实现透明窗体上绘制随机出现的小球(实例代码)
May 17 Python
python3操作redis实现List列表实例
Aug 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
SONY ICF-SW07收音机电路分析
2021/03/02 无线电
用文本文件制作留言板提示(上)
2006/10/09 PHP
PHP学习 运算符与运算符优先级
2008/06/15 PHP
PHP多进程编程总结(推荐)
2016/07/18 PHP
AJAX的使用方法详解
2017/04/29 PHP
php和C#的yield迭代器实现方法对比分析
2019/07/17 PHP
PHP命名空间用法实例分析
2019/09/04 PHP
PHP程序员简单的开展服务治理架构操作详解(二)
2020/05/14 PHP
TP5多入口设置实例讲解
2020/12/15 PHP
TNC vs BOOM BO3 第二场2.13
2021/03/10 DOTA
jWiard 基于JQuery的强大的向导控件介绍
2011/10/28 Javascript
DIV+CSS+JS不间断横向滚动实现代码
2013/03/19 Javascript
js实现回放拖拽轨迹从过程上进行分析
2014/06/26 Javascript
JavaScript中诡异的delete操作符
2015/03/12 Javascript
EasyUI 结合JS导出Excel文件的实现方法
2016/11/10 Javascript
JS表单验证方法实例小结【电话、身份证号、Email、中文、特殊字符、身份证号等】
2017/02/14 Javascript
JS返回页面时自动回滚到历史浏览位置
2018/09/26 Javascript
微信小程序上传图片到php服务器的方法
2019/05/23 Javascript
微信小程序 数据缓存实现方法详解
2019/08/26 Javascript
python中PIL安装简单教程
2016/04/21 Python
python模拟哔哩哔哩滑块登入验证的实现
2020/04/24 Python
Pycharm插件(Grep Console)自定义规则输出颜色日志的方法
2020/05/27 Python
pycharm 使用anaconda为默认环境的操作
2021/02/05 Python
荷兰和比利时时尚鞋店:Van Dalen
2018/04/23 全球购物
茱莉蔻美国官网:Jurlique美国
2020/11/24 全球购物
国培教师自我鉴定
2014/02/12 职场文书
俞敏洪北大演讲稿
2014/05/22 职场文书
监督检查工作方案
2014/05/28 职场文书
社区禁毒工作方案
2014/06/02 职场文书
低碳环保标语
2014/06/12 职场文书
习近平在党的群众路线教育实践活动总结大会上的讲话
2014/10/21 职场文书
用position:sticky完美解决小程序吸顶问题的实现方法
2021/04/24 HTML / CSS
Python使用random模块实现掷骰子游戏的示例代码
2021/04/29 Python
Pytorch 如何实现LSTM时间序列预测
2021/05/17 Python
Python OpenCV实现传统图片格式与base64转换
2021/06/13 Python
mysql的数据压缩性能对比详情
2021/11/07 MySQL