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 19 Python
深入浅析Python获取对象信息的函数type()、isinstance()、dir()
Sep 17 Python
python 3.6.2 安装配置方法图文教程
Sep 18 Python
对Python 窗体(tkinter)文本编辑器(Text)详解
Oct 11 Python
在Mac下使用python实现简单的目录树展示方法
Nov 01 Python
python os模块简单应用示例
May 23 Python
梅尔倒谱系数(MFCC)实现
Jun 19 Python
Django REST framework内置路由用法
Jul 26 Python
Python实现将蓝底照片转化为白底照片功能完整实例
Dec 13 Python
python通过nmap扫描在线设备并尝试AAA登录(实例代码)
Dec 30 Python
python批量修改交换机密码的示例
Sep 22 Python
python字典与json转换的方法总结
Dec 28 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中定义网站根目录的常用方法
2010/08/08 PHP
php 数据库字段复用的基本原理与示例
2011/07/22 PHP
PHP对象转换为数组函数(递归方法)
2012/02/04 PHP
PHP基于单例模式实现的mysql类
2016/01/09 PHP
浅谈Javascript面向对象编程
2011/11/15 Javascript
html+css+js实现xp window界面及有关功能
2013/03/26 Javascript
Jquery中CSS选择器用法分析
2015/02/10 Javascript
js设置document.domain实现跨域的注意点分析
2015/05/21 Javascript
使用bootstrap3开发响应式网站
2016/05/12 Javascript
AngularJS轻松实现双击排序的功能
2016/08/30 Javascript
简单谈谈require模块化jquery和angular的问题
2017/06/23 jQuery
Vue学习之路之登录注册实例代码
2017/07/06 Javascript
Vue动态控制input的disabled属性的方法
2018/06/26 Javascript
WebGL学习教程之Three.js学习笔记(第一篇)
2019/04/25 Javascript
vscode中eslint插件的配置(prettier配置无效)
2019/09/10 Javascript
在Chrome DevTools中调试JavaScript的实现
2020/04/07 Javascript
在Vue中使用HOC模式的实现
2020/08/23 Javascript
Python实现子类调用父类的方法
2014/11/10 Python
Python的Django REST框架中的序列化及请求和返回
2016/04/11 Python
django模型层(model)进行建表、查询与删除的基础教程
2017/11/21 Python
python 数据生成excel导出(xlwt,wlsxwrite)代码实例
2019/08/23 Python
基于python cut和qcut的用法及区别详解
2019/11/22 Python
python 穷举指定长度的密码例子
2020/04/02 Python
浅析python 通⽤爬⾍和聚焦爬⾍
2020/09/28 Python
海蓝之谜(LA MER)澳大利亚官方商城:全球高端奢华护肤品牌
2017/10/27 全球购物
SNIDEL官网:日本VIVI杂志人气少女第一品牌
2020/03/12 全球购物
校园门卫岗位职责
2013/12/09 职场文书
季度思想汇报
2014/01/01 职场文书
学习保证书范文
2014/04/30 职场文书
节约用水标语
2014/06/11 职场文书
法定代表人身份证明书
2014/09/10 职场文书
成都人事代理协议书
2014/10/25 职场文书
2014最新股权信托合同协议书
2014/11/18 职场文书
劳动纠纷调解协议书格式
2014/11/30 职场文书
课文《燕子》教学反思
2016/02/17 职场文书
吃通javascript正则表达式
2021/04/21 Javascript