urllib2自定义opener详解


Posted in Python onFebruary 07, 2014

urllib2.urlopen()函数不支持验证、cookie或者其它HTTP高级功能。要支持这些功能,必须使用build_opener()函数创建自定义Opener对象。

build_opener([handler1 [ handler2, ... ]])

参数handler是Handler实例,常用的有HTTPBasicAuthHandler、HTTPCookieProcessor、ProxyHandler等。

build_opener ()返回的对象具有open()方法,与urlopen()函数的功能相同。

如果要修改http报头,可以用:

import urllib2
opener = urllib2.build_opener()
opener.addheaders = [('User-agent', 'Mozilla/5.0')]
opener.open('http://www.example.com/')

2. install_opener(opener)

安装不同的opener对象作为urlopen()使用的全局opener。

3. 密码验证(HTTPBasicAuthHandler)

HTTPBasicAuthHandler()处理程序可用add_password()来设置密码。

h.add_password(realm,uri,user,passwd)

realm是与验证相关联的名称或描述信息,取决于远程服务器。uri是基URL。user和passwd分别指定用户名和密码。

import urllib2
auth=urllib2.HTTPBasicAuthHandler()
auth.add_password('Administrator','http://www.example.com','Dave','123456')
opener=urllib2.build_opener(auth)
u=opener.open('http://www.example.com/evilplan.html')

4. Cookie处理(HTTPCookieProcessor)

import urllib2,cookielib
cookie=cookielib.CookieJar()
cookiehand=urllib2.HTTPCookieProcessor(cookie)
opener=urllib2.build_opener(cookiehand)

5.代理(ProxyHandler)

ProxyHandler(proxies)参数proxies是一个字典,将协议名称(http,ftp)等映射到相应代理服务器的URL。

proxy=ProxyHandler({'http':'http://someproxy.com:8080'})
auth=HTTPBasicAuthHandler()
auth.add_password()
opener=build_opener(auth,proxy)

也可以在urlopen中使用代理

import urllib2  
proxy = 'http://%s:%s@%s' % ('userName', 'password', 'proxy')  
inforMation = urllib2.urlopen("http://www.example.com", proxies={'http':proxy}) 
Python 相关文章推荐
Python编写百度贴吧的简单爬虫
Apr 02 Python
Python变量赋值的秘密分享
Apr 03 Python
使用Python-OpenCV向图片添加噪声的实现(高斯噪声、椒盐噪声)
May 28 Python
python 绘制拟合曲线并加指定点标识的实现
Jul 10 Python
django 信号调度机制详解
Jul 19 Python
python中使用while循环的实例
Aug 05 Python
Python实现Restful API的例子
Aug 31 Python
python使用python-pptx删除ppt某页实例
Feb 14 Python
keras多显卡训练方式
Jun 10 Python
python接入支付宝的实例操作
Jul 20 Python
python爬虫如何解决图片验证码
Feb 14 Python
Django实现drf搜索过滤和排序过滤
Jun 21 Python
python解析html开发库pyquery使用方法
Feb 07 #Python
python3.3实现乘法表示例
Feb 07 #Python
zbar解码二维码和条形码示例
Feb 07 #Python
python命令行参数sys.argv使用示例
Jan 28 #Python
python删除文件示例分享
Jan 28 #Python
python list转dict示例分享
Jan 28 #Python
python使用os模块的os.walk遍历文件夹示例
Jan 27 #Python
You might like
如何使用PHP中的字符串函数
2006/11/24 PHP
如何隐藏你的.php文件
2007/01/04 PHP
PHP时间格式控制符对照表分享
2013/07/23 PHP
php解压文件代码实现php在线解压
2014/02/13 PHP
php下Memcached入门实例解析
2015/01/05 PHP
php结合安卓客户端实现查询交互实例
2015/05/05 PHP
PHP编程之设置apache虚拟目录
2016/07/08 PHP
Laravel框架实现redis集群的方法分析
2017/09/14 PHP
响应鼠标变换表格背景或者颜色的代码
2009/03/30 Javascript
通过上下左右键和回车键切换光标实现代码
2013/03/08 Javascript
图片无缝滚动代码(向左/向下/向上)
2013/04/10 Javascript
js调用浏览器打印模块实现点击按钮触发自定义函数
2014/03/21 Javascript
jQuery中:eq()选择器用法实例
2014/12/29 Javascript
Angularjs中使用Filters详解
2016/03/11 Javascript
又一款MVVM组件 构建自己的Vue组件(2)
2017/03/13 Javascript
微信小程序 wepy框架与iview-weapp的用法详解
2019/04/10 Javascript
vue 数据双向绑定的实现方法
2021/03/04 Vue.js
[01:59]DOTA2首部纪录片《Free to play》预告片
2014/03/12 DOTA
[01:00] DOTA2英雄背景故事第五期之重力引力法则谜团
2020/07/16 DOTA
详细讲解用Python发送SMTP邮件的教程
2015/04/29 Python
Python实现身份证号码解析
2015/09/01 Python
利用python实现简单的循环购物车功能示例代码
2017/07/05 Python
python中subprocess批量执行linux命令
2018/04/27 Python
python制作mysql数据迁移脚本
2019/01/01 Python
tensorflow 固定部分参数训练,只训练部分参数的实例
2020/01/20 Python
python 一维二维插值实例
2020/04/22 Python
一文读懂Python 枚举
2020/08/25 Python
详解python with 上下文管理器
2020/09/02 Python
如何基于Django实现上下文章跳转
2020/09/16 Python
Python3.7安装PyQt5 运行配置Pycharm的详细教程
2020/10/15 Python
物流经理自我评价
2013/09/23 职场文书
喜之郎果冻广告词
2014/03/20 职场文书
《莫泊桑拜师》教学反思
2014/04/23 职场文书
写给女朋友的检讨书
2015/05/06 职场文书
居安思危观后感
2015/06/11 职场文书
《角的初步认识》教学反思
2016/02/17 职场文书