我们之前使用的urlopen是一个特殊的opener,它是模块帮我们构建好的,但是urlopen()方法不支持代理、cookie等其他的HTTP/HTTPS高级功能。要支持这些功能,需要创建自定义opener对象。
1.通过request.build.opener()方法创建自定义opener对象
from urllib import request
# 构建处理器对象(专门处理HTTP请求的对象)
http_handler = request.HTTPHandler()
# 创建自定义opener
opener = request.build_opener(http_handler)
2.使用自定义的opener对象,调用open()方法发送请求
# 调用open()发送请求
resp = opener.open("http://www.baidu.com").read().decode()
3.使用request.install_opener()将自定义的opener对象定义为全局opener
# 将之前自定义的opener定义为全局opener,这样就可以使用urlopen()直接调用自定义的opener
request.install_opener(opener)
resp = request.urlopen("http://www.baidu.com").read().decode()