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中Django框架利用url来控制登录的方法
Jul 25 Python
理解python正则表达式
Jan 15 Python
Python多线程经典问题之乘客做公交车算法实例
Mar 22 Python
Python使用requests及BeautifulSoup构建爬虫实例代码
Jan 24 Python
使用11行Python代码盗取了室友的U盘内容
Oct 23 Python
python实现二维插值的三维显示
Dec 17 Python
画pytorch模型图,以及参数计算的方法
Aug 17 Python
Python中 CSV格式清洗与转换的实例代码
Aug 29 Python
使用python求解二次规划的问题
Feb 29 Python
使用Python第三方库pygame写个贪吃蛇小游戏
Mar 06 Python
详解Python中的路径问题
Sep 02 Python
python获取时间戳的实现示例(10位和13位)
Sep 23 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
二次元帅气男生排行榜,只想悄悄收藏系列
2020/03/04 日漫
php使用CURL伪造IP和来源实例详解
2015/01/15 PHP
PHP获取当前相对于域名目录的方法
2015/06/26 PHP
thinkPHP统计排行与分页显示功能示例
2016/12/02 PHP
thinkPHP5.0框架验证码调用及点击图片刷新简单实现方法
2018/09/07 PHP
PHP+fiddler抓包采集微信文章阅读数点赞数的思路详解
2019/12/20 PHP
TextArea 控件的最大长度问题(js json)
2009/12/16 Javascript
基于jQuery的倒计时实现代码
2012/05/30 Javascript
jQuery图片轮播插件——前端开发必看
2016/05/31 Javascript
vue2.0项目中使用Ueditor富文本编辑器示例代码
2017/08/14 Javascript
微信小程序实现拖拽 image 触摸事件监听的实例
2017/08/17 Javascript
详解使用Visual Studio Code对Node.js进行断点调试
2017/09/14 Javascript
JavaScript实现计算多边形质心的方法示例
2018/01/31 Javascript
JavaScript实现构造json数组的方法分析
2018/08/17 Javascript
Angular Material Icon使用详解
2018/11/07 Javascript
React手稿之 React-Saga的详解
2018/11/12 Javascript
原生js无缝轮播插件使用详解
2020/03/09 Javascript
解决vue项目运行提示Warnings while compiling.警告的问题
2020/09/18 Javascript
使用python装饰器验证配置文件示例
2014/02/24 Python
Python全局变量操作详解
2015/04/14 Python
Python基于smtplib实现异步发送邮件服务
2015/05/28 Python
Python UnboundLocalError和NameError错误根源案例解析
2018/10/31 Python
如何运行.ipynb文件的图文讲解
2019/06/27 Python
基于python 微信小程序之获取已存在模板消息列表
2019/08/05 Python
50行Python代码实现视频中物体颜色识别和跟踪(必须以红色为例)
2019/11/20 Python
浅谈Pycharm最有必要改的几个默认设置项
2020/02/14 Python
python中如何进行连乘计算
2020/05/28 Python
Python常用库Numpy进行矩阵运算详解
2020/07/21 Python
CSS3制作轮播图的一种方法
2019/11/11 HTML / CSS
英国综合网上购物商城:The Hut
2018/07/03 全球购物
2016年国庆节67周年活动总结
2016/04/01 职场文书
2016年“6.26”禁毒宣传月系列活动总结
2016/04/05 职场文书
Python识别花卉种类鉴定网络热门植物并自动整理分类
2022/04/08 Python
在Docker容器中部署SQL Server
2022/04/11 Servers
Android Canvas绘制文字横纵向对齐
2022/06/05 Java/Android
CSS浮动引起的高度塌陷问题
2022/08/05 HTML / CSS