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选择排序算法的实现代码
Nov 21 Python
Python列表list内建函数用法实例分析【insert、remove、index、pop等】
Jul 24 Python
python实现redis三种cas事务操作
Dec 19 Python
对python中Matplotlib的坐标轴的坐标区间的设定实例讲解
May 25 Python
django表单实现下拉框的示例讲解
May 29 Python
Python利用Django如何写restful api接口详解
Jun 08 Python
使用Python进行体育竞技分析(预测球队成绩)
May 16 Python
python批量解压zip文件的方法
Aug 20 Python
Python+Tensorflow+CNN实现车牌识别的示例代码
Oct 11 Python
如何使用python代码操作git代码
Feb 29 Python
tensorflow 2.0模式下训练的模型转成 tf1.x 版本的pb模型实例
Jun 22 Python
python使用QQ邮箱实现自动发送邮件
Jun 22 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将fileterms函数返回的结果变成可读的形式
2011/04/21 PHP
解析strtr函数的效率问题
2013/06/26 PHP
解析php 版获取重定向后的地址(代码)
2013/06/26 PHP
PHP实现限制IP访问及提交次数的方法详解
2017/07/17 PHP
基于 Swoole 的微信扫码登录功能实现代码
2018/01/15 PHP
用YUI做了个标签浏览效果
2007/02/20 Javascript
js控制的回到页面顶端goTop的代码实现
2013/03/20 Javascript
使用GruntJS链接与压缩多个JavaScript文件过程详解
2013/08/02 Javascript
javascript自动恢复文本框点击清除后的默认文本
2016/01/12 Javascript
微信开发 消息推送实现代码
2016/10/21 Javascript
Nodejs进阶:如何将图片转成datauri嵌入到网页中去实例
2016/11/21 NodeJs
微信公众号开发 自定义菜单跳转页面并获取用户信息实例详解
2016/12/08 Javascript
nodejs前端自动化构建环境的搭建
2017/07/26 NodeJs
JS实现基于拖拽改变物体大小的方法
2018/01/23 Javascript
浅谈让你的代码更简短,更整洁,更易读的ES6小技巧
2018/10/25 Javascript
微信小程序MUI导航栏透明渐变功能示例(通过改变rgba的a值实现)
2019/01/24 Javascript
layui下拉框获取下拉值(select)的例子
2019/09/10 Javascript
React Native中ScrollView组件轮播图与ListView渲染列表组件用法实例分析
2020/01/06 Javascript
Vue事件处理原理及过程详解
2020/03/11 Javascript
[40:55]DOTA2上海特级锦标赛主赛事日 - 2 败者组第二轮#4Newbee VS Fnatic
2016/03/03 DOTA
[54:02]2018DOTA2亚洲邀请赛 4.1 小组赛 B组 IG vs VGJ.T
2018/04/03 DOTA
[54:06]OG vs TNC 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
初步认识Python中的列表与位运算符
2015/10/12 Python
django的ORM操作 增加和查询
2019/07/26 Python
Python3 requests文件下载 期间显示文件信息和下载进度代码实例
2019/08/16 Python
解决Tensorboard 不显示计算图graph的问题
2020/02/15 Python
Ubuntu中配置TensorFlow使用环境的方法
2020/04/21 Python
美国现代家具购物网站:LexMod
2019/01/09 全球购物
英国在线药房:Chemist.co.uk
2019/03/26 全球购物
工商治理实习生的自我评价分享
2014/02/20 职场文书
大学开学计划书
2014/04/30 职场文书
常务副县长“三严三实”对照检查材料思想汇报
2014/10/05 职场文书
合作协议书模板
2014/10/10 职场文书
介绍信样本
2015/01/31 职场文书
中国式结婚:司仪主持词(范文)
2019/07/25 职场文书
导游词之上饶龟峰
2019/10/25 职场文书