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中如何使用正则表达式的非贪婪模式示例
Oct 09 Python
关于Python作用域自学总结
Jun 10 Python
django 配置阿里云OSS存储media文件的例子
Aug 20 Python
Python&&GDAL实现NDVI的计算方式
Jan 09 Python
Python中的sys.stdout.write实现打印刷新功能
Feb 21 Python
解决django接口无法通过ip进行访问的问题
Mar 27 Python
解决pycharm导入本地py文件时,模块下方出现红色波浪线的问题
Jun 01 Python
Python基于httpx模块实现发送请求
Jul 07 Python
Python 利用OpenCV给照片换底色的示例代码
Aug 03 Python
详解python程序中的多任务
Sep 16 Python
PyTorch中clone()、detach()及相关扩展详解
Dec 09 Python
Python 可视化神器Plotly详解
Dec 26 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
SSI指令
2006/11/25 PHP
php magic_quotes_gpc的一点认识与分析
2008/08/18 PHP
基于MySQL分区性能的详细介绍
2013/05/02 PHP
php 字符串中的\n换行符无效、不能换行的解决方法
2014/04/02 PHP
php的ddos攻击解决方法
2015/01/08 PHP
PHP实现图的邻接矩阵表示及几种简单遍历算法分析
2017/11/24 PHP
PHP微信支付结果通知与回调策略分析
2019/01/10 PHP
phpStorm+XDebug+chrome 配置详解
2019/04/01 PHP
在线编辑器的实现原理(兼容IE和FireFox)
2007/03/09 Javascript
alert中断settimeout计时功能
2013/07/26 Javascript
javascript放大镜效果的简单实现
2013/12/09 Javascript
JS 操作Array数组的方法及属性实例解析
2014/01/08 Javascript
IE6-IE9中tbody的innerHTML不能赋值的解决方法
2014/09/26 Javascript
jQuery实现购物车计算价格功能的方法
2015/03/25 Javascript
JavaScript中日期的相关操作方法总结
2015/10/24 Javascript
Javascript简写条件语句(推荐)
2016/06/12 Javascript
js中遍历对象的属性和值的方法
2016/07/27 Javascript
Vue.js实现无限加载与分页功能开发
2016/11/03 Javascript
JavaScript 中的 this 简单规则
2017/09/19 Javascript
微信小程序实现红包功能(后端PHP实现逻辑)
2018/07/11 Javascript
Vue.js 图标选择组件实践详解
2018/12/03 Javascript
JS工厂模式开发实践案例分析
2019/10/17 Javascript
[01:22:19]EG vs TNC Supermajor小组赛B组败者组第一轮 BO3 第二场 6.2
2018/06/03 DOTA
python3在同一行内输入n个数并用列表保存的例子
2019/07/20 Python
Pytorch 数据加载与数据预处理方式
2019/12/31 Python
Python全面分析系统的时域特性和频率域特性
2020/02/26 Python
Django Admin后台添加数据库视图过程解析
2020/04/01 Python
使用Django的JsonResponse返回数据的实现
2021/01/15 Python
HTML5引入的新数组TypedArray介绍
2012/12/24 HTML / CSS
大课间活动实施方案
2014/03/06 职场文书
企业党员一句话承诺
2014/05/30 职场文书
大学生党员自我剖析材料
2014/10/06 职场文书
雷锋之歌观后感
2015/06/10 职场文书
2016年国培心得体会及反思
2016/01/13 职场文书
正确使用MySQL INSERT INTO语句
2021/05/26 MySQL
【DOTA2】当街暴打?PSG LGD vs VG - DPC 2022 WINTER TOUR CN
2022/04/02 DOTA