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 相关文章推荐
win7安装python生成随机数代码分享
Dec 27 Python
itchat和matplotlib的结合使用爬取微信信息的实例
Aug 25 Python
学习Python3 Dlib19.7进行人脸面部识别
Jan 24 Python
详谈python3 numpy-loadtxt的编码问题
Apr 29 Python
使用sklearn之LabelEncoder将Label标准化的方法
Jul 11 Python
python3+opencv3识别图片中的物体并截取的方法
Dec 05 Python
Python中文件的写入读取以及附加文字方法
Jan 23 Python
简单了解django索引的相关知识
Jul 17 Python
python3中rank函数的用法
Nov 27 Python
Python for循环与getitem的关系详解
Jan 02 Python
python3.8下载及安装步骤详解
Jan 15 Python
Python插入Elasticsearch操作方法解析
Jan 19 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
实现树状结构的两种方法
2006/10/09 PHP
php若干单维数组遍历方法的比较
2011/09/20 PHP
CL vs ForZe BO5 第二场 2.13
2021/03/10 DOTA
再谈ie和firefox下的document.all属性
2009/10/21 Javascript
window.js 主要包含了页面的一些操作
2009/12/23 Javascript
jQuery 源码分析笔记(7) Queue
2011/06/19 Javascript
向当前style sheet中插入一个新的style实现方法
2013/04/01 Javascript
js获取URL的参数的方法(getQueryString)示例
2013/09/29 Javascript
jquery datepicker参数介绍和示例
2014/04/15 Javascript
如何在node的express中使用socket.io
2014/12/15 Javascript
Javascript中常见的逻辑题和解决方法
2016/09/17 Javascript
javascript 判断页面访问方式电脑或者移动端
2016/09/19 Javascript
Bootstrap表格制作代码
2017/03/17 Javascript
详解Vue 非父子组件通信方法(非Vuex)
2017/05/24 Javascript
VUE axios上传图片到七牛的实例代码
2017/07/28 Javascript
node.js中使用Export和Import的方法
2017/09/18 Javascript
vue二级路由设置方法
2018/02/09 Javascript
一种angular的方法级的缓存注解(装饰器)
2018/03/13 Javascript
nodejs之koa2请求示例(GET,POST)
2018/08/07 NodeJs
Vue 组件修改根实例的数据的方法
2019/04/02 Javascript
Vue 实现前端权限控制的示例代码
2019/07/09 Javascript
nodejs一个简单的文件服务器的创建方法
2019/09/13 NodeJs
JS 图片压缩原理与实现方法详解
2020/04/29 Javascript
Python实现发送QQ邮件的封装
2017/07/14 Python
python TCP Socket的粘包和分包的处理详解
2018/02/09 Python
Python提取PDF内容的方法(文本、图像、线条等)
2019/09/25 Python
Python Celery多队列配置代码实例
2019/11/22 Python
python爬虫今日热榜数据到txt文件的源码
2021/02/23 Python
工程预算与管理应届生求职信
2013/10/06 职场文书
公司领导推荐信
2013/11/12 职场文书
2014的自我评价
2014/01/13 职场文书
自习课吵闹检讨书范文
2014/09/26 职场文书
2015年财务试用期工作总结
2014/12/24 职场文书
公司酒会主持词
2015/07/02 职场文书
班委竞选稿范文
2015/11/21 职场文书
数据设计之权限的实现
2022/08/05 MySQL