关于 Handler 与 opener
我们可以使用 urllib.request.Request() 构造请求对象,但是对于一些更高级的操作,比如 Cookies 处理、代理设置 、身份验证等等,Request() 是处理不了的
这时就需要更强大的工具 —— Handler,我们可以把它理解为各种处理器,有处理登录验证的,有处理 Cookies 的,有处理代理设置的,使用处理器可以做到 HTTP 请求中的所有事情
HTTPCookieProcessor : 用于处理 Cookies 信息的处理器
ProxyHandler :用于设置代理的处理器,默认代理为空
HTTPBasicAuthHandler :用于进行身份验证的处理器
HTTPPasswordMgr :用于管理密码的处理器,它维护了用户名和密码的表
HTTPRedirectHandler :用于处理重定向的处理器
我们通常会使用 Handler 来创建 opener,为什么要引人Opener 呢?
因为需要实现更高级的功能,之前使用的 Request() 和 urlopen() 相当于类库为你封装好了极其常用的请求方法,利用它们可以完成基本的请求,但是现在不一样了,
我们需要实现更高级的功能,所以需要深入一层进行配置,使用更底层的实例来完成操作,所以这里就用到了 Opener,Opener 可以使用 open() 实现跟 urlopen() 一样的功能