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的MongoDB模块PyMongo操作方法集锦
Jan 05 Python
Python利用Beautiful Soup模块搜索内容详解
Mar 29 Python
Pycharm学习教程(5) Python快捷键相关设置
May 03 Python
对python产生随机的二维数组实例详解
Dec 13 Python
python如何获取当前文件夹下所有文件名详解
Jan 25 Python
对Python 中矩阵或者数组相减的法则详解
Aug 26 Python
500行代码使用python写个微信小游戏飞机大战游戏
Oct 16 Python
python如何进行矩阵运算
Jun 05 Python
Python实现寻找回文数字过程解析
Jun 09 Python
Python如何使用27行代码绘制星星图
Jul 20 Python
Python GUI库Tkiner使用方法代码示例
Nov 27 Python
关于django python manage.py startapp 应用名出错异常原因解析
Dec 15 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使用星号替代用户名手机和邮箱的实现代码
2018/02/07 PHP
看了就知道什么是JSON
2007/12/09 Javascript
JavaScript Konami Code 实现代码
2009/07/29 Javascript
JQuery中的ready函数冲突的解决方法
2010/05/17 Javascript
JS在textarea光标处插入文本的小例子
2013/03/22 Javascript
javaScript 动态访问JSon元素示例代码
2013/08/30 Javascript
表单元素与非表单元素刷新区别详细解析
2013/11/06 Javascript
JavaScript设计模式之原型模式(Object.create与prototype)介绍
2014/12/28 Javascript
分享9个最好用的JavaScript开发工具和代码编辑器
2015/03/24 Javascript
jquery表单验证需要做些什么
2015/11/17 Javascript
jQuery实现的鼠标经过时变宽的效果(附demo源码)
2016/04/28 Javascript
深入理解事件冒泡(Bubble)和事件捕捉(capture)
2016/05/28 Javascript
全面了解JavaScirpt 的垃圾(garbage collection)回收机制
2016/07/11 Javascript
Javascript Event(事件)的传播与冒泡
2017/01/23 Javascript
微信小程序scroll-view组件实现滚动动画
2018/01/31 Javascript
Vue中插入HTML代码的方法
2018/09/21 Javascript
vue本地打开build后生成的dist文件夹index.html问题
2019/09/04 Javascript
JavaScript面向对象核心知识与概念归纳整理
2020/05/09 Javascript
uni-app使用微信小程序云函数的步骤示例
2020/05/22 Javascript
使用node-media-server搭建一个简易的流媒体服务器
2021/01/20 Javascript
[00:32]2018DOTA2亚洲邀请赛出场——VP
2018/04/04 DOTA
[52:32]完美世界DOTA2联赛PWL S2 Magma vs LBZS 第三场 11.18
2020/11/18 DOTA
利用Python脚本在Nginx和uwsgi上部署MoinMoin的教程
2015/05/05 Python
python实现自动登录人人网并采集信息的方法
2015/06/28 Python
一个基于flask的web应用诞生(1)
2017/04/11 Python
python 通过字符串调用对象属性或方法的实例讲解
2018/04/21 Python
mac下给python3安装requests库和scrapy库的实例
2018/06/13 Python
解决python线程卡死的问题
2019/02/18 Python
Python内置random模块生成随机数的方法
2019/05/31 Python
使用 Python 处理3万多条数据只要几秒钟
2020/01/19 Python
css3实现动画的三种方式
2020/08/24 HTML / CSS
关于iframe跨域使用postMessage的实现
2019/10/29 HTML / CSS
客户经理岗位职责
2013/12/08 职场文书
马云北大演讲完整版:真心话,什么才是阿里的核心竞争力?
2014/04/04 职场文书
听证通知书
2015/04/24 职场文书
企业党支部工作总结2015
2015/05/21 职场文书