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里隐藏的“禅”
Jun 16 Python
Python标准库之Sys模块使用详解
May 23 Python
Python从MP3文件获取id3的方法
Jun 15 Python
Python实现监控程序执行时间并将其写入日志的方法
Jun 30 Python
python各种语言间时间的转化实现代码
Mar 23 Python
Python实现删除文件中含“指定内容”的行示例
Jun 09 Python
Python list列表中删除多个重复元素操作示例
Feb 27 Python
Django连接数据库并实现读写分离过程解析
Nov 13 Python
tensorflow之自定义神经网络层实例
Feb 07 Python
python encrypt 实现AES加密的实例详解
Feb 20 Python
自定义Django默认的sitemap站点地图样式
Mar 04 Python
django实现模型字段动态choice的操作
Apr 01 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读取javascript设置的cookies的代码
2010/04/12 PHP
php实现的返回数据格式化类实例
2014/09/22 PHP
PHP实现对xml进行简单的增删改查(CRUD)操作示例
2017/05/19 PHP
Laravel下生成验证码的类
2017/11/15 PHP
PHP CURL使用详解
2019/03/21 PHP
基于逻辑运算的简单权限系统(实现) JS 版
2007/03/24 Javascript
两种WEB下的模态对话框 (asp.net或js的分别实现)
2009/12/02 Javascript
JavaScript中的函数声明和函数表达式区别浅析
2015/03/27 Javascript
JavaScript实现网站访问次数统计代码
2015/08/12 Javascript
莱鸟介绍window.print()方法
2016/01/06 Javascript
js倒计时简单实现代码
2016/08/11 Javascript
在点击div中的p时,如何阻止事件冒泡
2017/02/07 Javascript
jQuery源码解读之extend()与工具方法、实例方法详解
2017/03/30 jQuery
Vue中的数据监听和数据交互案例解析
2017/07/12 Javascript
详解vue组件中使用路由方法
2019/02/12 Javascript
微信小程序实现音频文件播放进度的实例代码
2020/03/02 Javascript
Electron整合React使用搭建开发环境的步骤详解
2020/06/07 Javascript
nginx部署多个vue项目的方法示例
2020/09/06 Javascript
Python数据处理numpy.median的实例讲解
2018/04/02 Python
python 识别图片中的文字信息方法
2018/05/10 Python
python实现在函数中修改变量值的方法
2019/07/16 Python
python字典的setdefault的巧妙用法
2019/08/07 Python
python之PyQt按钮右键菜单功能的实现代码
2019/08/17 Python
Python进程间通信 multiProcessing Queue队列实现详解
2019/09/23 Python
python数值基础知识浅析
2019/11/19 Python
一张图片能隐含千言万语之隐藏你的程序代码
2012/12/13 HTML / CSS
HTML5本地存储之Web Storage应用介绍
2013/01/06 HTML / CSS
哥德堡通行证:Gothenburg Pass
2019/12/09 全球购物
求职简历推荐信范文
2013/12/02 职场文书
小学国庆节活动方案
2014/02/11 职场文书
演讲稿格式
2014/04/30 职场文书
学校青年志愿者活动总结
2015/05/06 职场文书
2017年大学生寒假社会实践活动总结
2016/04/06 职场文书
详解Python小数据池和代码块缓存机制
2021/04/07 Python
Vue CLI中模式与环境变量的深入详解
2021/05/30 Vue.js
MySQL 开窗函数
2022/02/15 MySQL