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 04 Python
Python的Django框架中的select_related函数对QuerySet 查询的优化
Apr 01 Python
Python使用metaclass实现Singleton模式的方法
May 05 Python
python去掉 unicode 字符串前面的u方法
Oct 21 Python
Python实现定时执行任务的三种方式简单示例
Mar 30 Python
Python中常用的8种字符串操作方法
May 06 Python
pytorch自定义初始化权重的方法
Aug 17 Python
Django 创建后台,配置sqlite3教程
Nov 18 Python
Python Gluon参数和模块命名操作教程
Dec 18 Python
Python如何将字符串转换为日期
Jul 31 Python
利用python批量爬取百度任意类别的图片的实现方法
Oct 07 Python
python geopandas读取、创建shapefile文件的方法
Jun 29 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中检查PHP文件是否有语法错误的方法
2009/12/23 PHP
PHP按行读取、处理较大CSV文件的代码实例
2014/04/09 PHP
thinkPHP5实现数据库添加内容的方法
2017/10/25 PHP
PHP微信支付结果通知与回调策略分析
2019/01/10 PHP
jQuery用unbind方法去掉hover事件及其他方法介绍
2013/03/18 Javascript
javascript 构造函数方式定义对象
2015/01/02 Javascript
JavaScript之AOP编程实例
2015/07/17 Javascript
jQuery自适应轮播图插件Swiper用法示例
2016/08/24 Javascript
纯JavaScript手写图片轮播代码
2016/10/20 Javascript
Vue.js实战之利用vue-router实现跳转页面
2017/04/01 Javascript
详解AngularJS脏检查机制及$timeout的妙用
2017/06/19 Javascript
静态页面实现 include 引入公用代码的示例
2017/09/25 Javascript
Sublime Text新建.vue模板并高亮(图文教程)
2017/10/26 Javascript
vue webpack实用技巧总结
2018/04/24 Javascript
微信小程序实现底部导航
2018/11/05 Javascript
Vue动态创建注册component的实例代码
2019/06/14 Javascript
HTML+JS实现“代码雨”效果源码(黑客帝国文字下落效果)
2020/03/17 Javascript
[50:02]完美世界DOTA2联赛PWL S2 Magma vs FTD 第三场 11.29
2020/12/03 DOTA
python 2.6.6升级到python 2.7.x版本的方法
2016/10/09 Python
Python面向对象实现一个对象调用另一个对象操作示例
2019/04/08 Python
在Python中表示一个对象的方法
2019/06/25 Python
nginx黑名单和django限速,最简单的防恶意请求方法分享
2019/08/09 Python
在python下实现word2vec词向量训练与加载实例
2020/06/09 Python
python3.6中anaconda安装sklearn踩坑实录
2020/07/28 Python
Omio波兰:全欧洲低价大巴、火车和航班搜索和比价
2018/02/16 全球购物
德国珠宝和配件商店:Styleserver
2021/02/23 全球购物
怎样让char类型的东西转换成int类型
2013/12/09 面试题
Java模拟试题
2014/11/10 面试题
工作的心得体会
2013/12/31 职场文书
大队干部竞选演讲稿
2014/04/28 职场文书
地球物理学专业推荐信
2014/09/08 职场文书
迎国庆演讲稿
2014/09/15 职场文书
《玩出了名堂》教学反思
2016/02/17 职场文书
超级实用的公文标题大全!
2019/07/19 职场文书
教你如何用Python实现人脸识别(含源代码)
2021/06/23 Python
Python中如何处理常见报错
2022/01/18 Python