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中的赋值运算符
May 13 Python
Python实现的简单dns查询功能示例
May 24 Python
python3使用SMTP发送简单文本邮件
Jun 19 Python
python数据批量写入ScrolledText的优化方法
Oct 11 Python
PyCharm设置护眼背景色的方法
Oct 29 Python
flask的orm框架SQLAlchemy查询实现解析
Dec 12 Python
Python TKinter如何自动关闭主窗口
Feb 26 Python
Python使用20行代码实现微信聊天机器人
Jun 05 Python
Python 删除List元素的三种方法remove、pop、del
Nov 16 Python
全网最详细的PyCharm+Anaconda的安装过程图解
Jan 25 Python
opencv检测动态物体的实现
Jul 21 Python
python语言中pandas字符串分割str.split()函数
Aug 05 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生成短网址示例
2014/05/05 PHP
PHP图形操作之Jpgraph学习笔记
2015/12/25 PHP
PHP的Yii框架中Model模型的学习教程
2016/03/29 PHP
微信开发之获取JSAPI TICKET
2017/07/07 PHP
PHP pthreads v3使用中的一些坑和注意点分析
2020/02/21 PHP
Sample script that displays all of the users in a given SQL Server DB
2007/06/16 Javascript
用javascript实现兼容IE7的类库 IE7_0_9.zip提供下载
2007/08/08 Javascript
javascript 原型链维护和继承详解
2014/11/26 Javascript
javascript制作网页图片上实现下雨效果
2015/02/26 Javascript
JavaScript中的getDay()方法使用详解
2015/06/09 Javascript
jQuery无刷新分页完整实例代码
2015/10/27 Javascript
JavaScript学习笔记之数组随机排序
2016/03/23 Javascript
javascript原型继承工作原理和实例详解
2016/04/07 Javascript
微信小程序 教程之模块化
2016/10/17 Javascript
Bootstrap导航条可点击和鼠标悬停显示下拉菜单
2016/11/25 Javascript
jQuery实现的浮动层div浏览器居中显示效果
2017/02/03 Javascript
浅析jsopn跨域请求原理及cors(跨域资源共享)的完美解决方法
2017/02/06 Javascript
详解设置Webstorm 利用babel将ES6自动转码成ES5
2017/12/20 Javascript
详解nodejs http请求相关总结
2019/03/31 NodeJs
新手快速入门微信小程序组件库 iView Weapp
2019/06/24 Javascript
js瀑布流布局的实现
2020/06/28 Javascript
JS简易计算器实例讲解
2020/06/30 Javascript
js+canvas绘制图形验证码
2020/09/21 Javascript
解决python3中自定义wsgi函数,make_server函数报错的问题
2017/11/21 Python
python实现对csv文件的列的内容读取
2018/07/04 Python
一个可以套路别人的python小程序实例代码
2019/04/09 Python
Python多进程入门、分布式进程数据共享实例详解
2019/06/03 Python
为什么说Python可以实现所有的算法
2019/10/04 Python
非洲NO.1网上商店:Jumia肯尼亚
2016/08/18 全球购物
助人为乐好少年事迹材料
2014/08/18 职场文书
解放思想大讨论活动心得体会
2014/09/11 职场文书
项目委托协议书(最新)
2014/09/13 职场文书
公务员年度考核个人总结
2015/02/12 职场文书
公司慰问信范文
2015/03/23 职场文书
初中生入团申请书范文(五篇)
2019/10/16 职场文书
MySql子查询IN的执行和优化的实现
2021/08/02 MySQL