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 代码性能优化技巧分享
Aug 07 Python
python基础教程之实现石头剪刀布游戏示例
Feb 11 Python
python计数排序和基数排序算法实例
Apr 25 Python
Python实现将SQLite中的数据直接输出为CVS的方法示例
Jul 13 Python
Python告诉你木马程序的键盘记录原理
Feb 02 Python
python定时复制远程文件夹中所有文件
Apr 30 Python
Python2.7实现多进程下开发多线程示例
May 31 Python
Python基于Tensor FLow的图像处理操作详解
Jan 15 Python
python加密解密库cryptography使用openSSL生成的密匙加密解密
Feb 11 Python
解决启动django,浏览器显示“服务器拒绝访问”的问题
May 13 Python
详细分析Python collections工具库
Jul 16 Python
python使用scapy模块实现ping扫描的过程详解
Jan 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 获取今日、昨日、上周、本月的起始时间戳和结束时间戳的方法
2013/09/28 PHP
微信公众号实现扫码获取微信用户信息(网页授权)
2019/04/09 PHP
php数组函数array_push()、array_pop()及array_shift()简单用法示例
2020/01/26 PHP
清除网页历史记录,屏蔽后退按钮!
2008/12/22 Javascript
javascript options属性集合操作代码
2009/12/28 Javascript
JavaScript中的细节分析
2012/06/30 Javascript
浅析JavaScript原型继承的陷阱
2013/12/03 Javascript
Node.js中对通用模块的封装方法
2014/06/06 Javascript
详解AngularJS中自定义指令的使用
2015/06/17 Javascript
JS+CSS实现TreeMenu二级树形菜单完整实例
2015/09/18 Javascript
JavaScript对象参数的引用传递
2016/01/14 Javascript
JS中如何实现复选框全选功能
2016/12/19 Javascript
AngularJS入门示例之Hello World详解
2017/01/04 Javascript
浅谈vue的踩坑路
2017/08/31 Javascript
老生常谈JavaScript面向对象基础与this指向问题
2017/10/16 Javascript
mint-ui的search组件在键盘显示搜索按钮的实现方法
2017/10/27 Javascript
原生JS实现逼真的图片3D旋转效果详解
2019/02/16 Javascript
JS把字符串格式的时间转换成几秒前、几分钟前、几小时前、几天前等格式
2019/07/10 Javascript
file-loader打包图片文件时路径错误输出为[object-module]的解决方法
2020/01/03 Javascript
微信小程序8种数据通信的方式小结
2020/02/03 Javascript
[01:10]DOTA2 Supermajor:英雄,由我们见证
2018/05/14 DOTA
python3.0 字典key排序
2008/12/24 Python
python动态性强类型用法实例
2015/05/09 Python
matplotlib绘制符合论文要求的图片实例(必看篇)
2017/06/02 Python
利用python实现微信头像加红色数字功能
2018/03/26 Python
python列表使用实现名字管理系统
2019/01/30 Python
Python Numpy数组扩展repeat和tile使用实例解析
2019/12/09 Python
怎么快速自学python
2020/06/22 Python
Ubuntu配置Pytorch on Graph (PoG)环境过程图解
2020/11/19 Python
Django haystack实现全文搜索代码示例
2020/11/28 Python
详解Canvas 实现炫丽的粒子运动效果(粒子生成文字)
2018/02/01 HTML / CSS
html5自定义video标签的海报与播放按钮功能
2019/12/04 HTML / CSS
吉尔德利巧克力公司:Ghirardelli Chocolate Company
2019/03/27 全球购物
金智子午JAVA面试题
2015/09/04 面试题
财务工作犯错检讨书
2014/10/07 职场文书
教师节老师寄语
2015/05/28 职场文书