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实现类似ftp传输文件的网络程序示例
Apr 08 Python
跟老齐学Python之永远强大的函数
Sep 14 Python
以Python的Pyspider为例剖析搜索引擎的网络爬虫实现方法
Mar 30 Python
Python数组定义方法
Apr 13 Python
Python实现公历(阳历)转农历(阴历)的方法示例
Aug 22 Python
python画出三角形外接圆和内切圆的方法
Jan 25 Python
Python http接口自动化测试框架实现方法示例
Dec 06 Python
Python文件常见操作实例分析【读写、遍历】
Dec 10 Python
解决python ogr shp字段写入中文乱码的问题
Dec 31 Python
python写日志文件操作类与应用示例
Jul 01 Python
用Python实现BP神经网络(附代码)
Jul 10 Python
python多线程扫描端口(线程池)
Sep 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
实用函数5
2007/11/08 PHP
PHP使用strtotime获取上个月、下个月、本月的日期
2015/12/30 PHP
javascript检查日期格式的函数[比较全]
2008/10/17 Javascript
基于Jquery的开发个代阴影的对话框效果代码
2011/07/28 Javascript
jQuery 下拉列表 二级联动插件分享
2012/03/29 Javascript
Javascript学习指南
2014/12/01 Javascript
javascript 构造函数方式定义对象
2015/01/02 Javascript
基于vue.js无缝滚动效果
2018/01/25 Javascript
vue微信分享的实现(在当前页面分享其他页面)
2019/04/16 Javascript
Vue.js+cube-ui(Scroll组件)实现类似头条效果的横向滚动导航条
2019/06/24 Javascript
vue实现鼠标移过出现下拉二级菜单功能
2019/12/12 Javascript
javascript实现画板功能
2020/04/12 Javascript
JavaScript 实现下雪特效的示例代码
2020/09/09 Javascript
python单线程实现多个定时器示例
2014/03/30 Python
跟老齐学Python之类的细节
2014/10/13 Python
Python正规则表达式学习指南
2016/08/02 Python
浅谈Python中带_的变量或函数命名
2017/12/04 Python
浅谈numpy数组的几种排序方式
2017/12/15 Python
pandas 对每一列数据进行标准化的方法
2018/06/09 Python
解决PyCharm同目录下导入模块会报错的问题
2018/10/13 Python
python使用pipeline批量读写redis的方法
2019/02/18 Python
Python爬取数据保存为Json格式的代码示例
2019/04/09 Python
selenium判断元素是否存在的两种方法小结
2020/12/07 Python
为2021年的第一场雪锦上添花:用matplotlib绘制雪花和雪景
2021/01/05 Python
纯HTML5+CSS3制作图片旋转
2016/01/12 HTML / CSS
HTML5中使用postMessage实现两个网页间传递数据
2016/06/22 HTML / CSS
团员个人的自我评价
2013/12/02 职场文书
四个太阳教学反思
2014/02/01 职场文书
幼儿园教学随笔感言
2014/02/23 职场文书
《三袋麦子》教学反思
2014/03/02 职场文书
初中教师业务学习材料
2014/05/12 职场文书
主题班会演讲稿
2014/05/22 职场文书
群众路线教育实践活动心得体会(教师)
2014/10/31 职场文书
2016党员三严三实心得体会
2016/01/15 职场文书
创业计划书之婴幼儿游泳馆
2019/09/11 职场文书
python中requests库+xpath+lxml简单使用
2021/04/29 Python