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之变量和参数
Oct 10 Python
Python安装第三方库的3种方法
Jun 21 Python
Python用imghdr模块识别图片格式实例解析
Jan 11 Python
python3安装pip3(install pip3 for python 3.x)
Apr 03 Python
详解Django中六个常用的自定义装饰器
Jul 04 Python
在Python中,不用while和for循环遍历列表的实例
Feb 20 Python
python实现列表的排序方法分享
Jul 01 Python
python傅里叶变换FFT绘制频谱图
Jul 19 Python
python字典setdefault方法和get方法使用实例
Dec 25 Python
解决selenium+Headless Chrome实现不弹出浏览器自动化登录的问题
Jan 09 Python
Python3使用Selenium获取session和token方法详解
Feb 16 Python
Python机器学习三大件之一numpy
May 10 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 字符串 小常识
2009/06/05 PHP
JavaScript 直接操作本地文件的实现代码
2009/12/01 Javascript
jQuery学习笔记 操作jQuery对象 文档处理
2012/09/19 Javascript
关于jQuery新的事件绑定机制on()的使用技巧
2013/04/26 Javascript
jQuery仿Excel表格编辑功能的实现代码
2013/05/01 Javascript
深入document.write()与HTML4.01的非成对标签的详解
2013/05/08 Javascript
js拖动div 当鼠标移动时整个div也相应的移动
2013/11/21 Javascript
JavaScript删除指定子元素代码实例
2015/01/13 Javascript
js实现接收表单的值并将值拼在表单action后面的方法
2015/11/23 Javascript
vue2.0中click点击当前li实现动态切换class
2017/06/21 Javascript
web前端vue实现插值文本和输出原始html
2018/01/19 Javascript
node内置调试方法总结
2018/02/22 Javascript
jQuery+datatables插件实现ajax加载数据与增删改查功能示例
2018/04/17 jQuery
详解vue-cli中使用rem,vue自适应
2019/05/06 Javascript
JavaScript图片旋转效果实现方法详解
2020/06/28 Javascript
js实现验证码功能
2020/07/24 Javascript
[09:37]2018DOTA2国际邀请赛寻真——不懈追梦的Team Serenity
2018/08/13 DOTA
python通过yield实现数组全排列的方法
2015/03/18 Python
在Python的Bottle框架中使用微信API的示例
2015/04/23 Python
Python通过poll实现异步IO的方法
2015/06/04 Python
尝试用最短的Python代码来实现服务器和代理服务器
2016/06/23 Python
python调用c++ ctype list传数组或者返回数组的方法
2019/02/13 Python
python 堆和优先队列的使用详解
2019/03/05 Python
Python Django实现layui风格+django分页功能的例子
2019/08/29 Python
使用python实现数组、链表、队列、栈的方法
2019/12/20 Python
Django 多对多字段的更新和插入数据实例
2020/03/31 Python
英国简约舒适女装品牌:Great Plains
2018/07/27 全球购物
为什么UNION ALL比UNION快
2016/03/17 面试题
光电信息专业应届生求职信
2013/10/07 职场文书
保卫科工作岗位职责
2014/03/01 职场文书
《欢乐的泼水节》教学反思
2014/04/22 职场文书
银行贷款收入证明
2014/10/17 职场文书
2015年人事科工作总结
2015/04/28 职场文书
交通事故被告代理词
2015/05/23 职场文书
使用javascript解析二维码的三种方式
2021/11/11 Javascript
python中pd.cut()与pd.qcut()的对比及示例
2022/06/16 Python