标题:Python标准库之urllib,urllib2自定义Opener 出处:沧海一粟 时间:Thu, 22 Jun 2017 14:42:31 +0000 作者:jed 地址:http://www.dzhope.com/post/1068/ 内容: urllib2.urlopen()函数不支持验证、cookie或者其它HTTP高级功能。要支持这些功能,必须使用build_opener()函数创建自定义Opener对象。 1. 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})    Generated by Bo-blog 2.1.1 Release