opener and handlers
urllib2.urlopen()函数不支持验证、cookie或者其它HTTP高级功能。要支持这些功能,必须使用build_opener()函数创建自定义Opener对象。
opener:
我们可以根据我们自己的 需要定制一个opener 并通过opener.open(url)方法来获得一个response。
handler :
参数handler是Handler实例,常用的有HTTPBasicAuthHandler、HTTPCookieProcessor、ProxyHandler等。
一个完整的例子:
import urllib.request as urllib2
class MyRedirectHandler(urllib2.HTTPRedirectHandler):
def http_error_302(self, req, fp, code, msg, headers):
#print "REDICt:",headers.headers
return urllib2.HTTPRedirectHandler.http_error_302(self, req, fp, code, msg, headers)
cookie = cookielib.CookieJar()
opener = urllib2.build_opener(MyRedirectHandler,urllib2.HTTPCookieProcessor(cookie))
urllib2.install_opener(opener)
req = urllib2.Request(url_kb)
response = opener.open(req)
print (response.read())
下面我们分析下这段代码:
我们使用build_opener()函数创建自定义Opener对象。
build_opener([handler1 [ handler2, … ]])
handler是Handler的实例,上面例子我们创建了两个实例。
调用install_opener()方法后我们就可以使用它可,这个opener就好比你为了访问网站而搭建了个环境。这个环境可以满足访问网站的需求和处理访问网站时所需要的信息。
我们也可以调用 addheaders()方法为opener添加首部。
做完一切准备工作后我们就可以用opener()访问或请求页面了。