urllib.request.Handler模块的介绍

**

urllib.request.Handler模块的介绍

**
首先介绍下 urllib.request.BaseHandler ,它是所有其他 Handler 的父类,它提供了最基本的 Handler 的方法,例
如 default_open() 、 protocol_request() 等。
接下来就有各种 Handler 类继承这个 BaseHandler ,列举如下:

  • HTTPDefaultErrorHandler 用于处理HTTP响应错误,错误都会抛出 HTTPError 类型的异常。
  • HTTPRedirectHandler 用于处理重定向。
  • HTTPCookieProcessor 用于处理 Cookie 。
  • ProxyHandler 用于设置代理,默认代理为空。
  • HTTPPasswordMgr 用于管理密码,它维护了用户名密码的表。
  • HTTPBasicAuthHandler 用于管理认证,如果一个链接打开时需要认证,那么可以用它来解决认证问题。

它们怎么来使用,不用着急,下面会有实例为你演示。
另外一个比较重要的就是 OpenerDirector ,我们可以称之为 Opener ,我们之前用过 urllib.request.urlopen() 这个方法,实际上它就是一个 Opener 。
那么为什么要引入 Opener 呢?因为我们需要实现更高级的功能,之前我们使用的 Request 、 urlopen() 相当于类库为你封装好了极其常用的请求方法,利用它们两个我们就可以完成基本的请求,但是现在不一样了,我们需要实现更高级的功能,所以我们需要深入一层,使用更上层的实例来完成我们的操作。所以,在这里我们就用到了比调用 urlopen() 的对象的更普遍的对象,也就是 Opener 。

Opener 可以使用 open() 方法,返回的类型和 urlopen() 如出一辙。那么它和 Handler 有什么关系?简而言之,就是利用 Handler 来构建 Opener 。
管理认证模块HTTPBasicAuthHandler

from urllib import request
auth_handler = request.HTTPBasicAuthHandler()               # 实例化了一个HTTPBasicAuthHandler对象
auth_handler.add_password(realm='PDQ Application',          # 调用add_password方法添加用户名和密码 
                          uri='https://mahler:8092/site-updates.py',
                          user='Ze1al',
                          passwd='wshichunhuo')
opener = request.build_opener(auth_handler)                 # 使用它构建一个链接
request.install_opener(opener)                              # 安装
request.urlopen('http://www.example.com/login.html')

设置代理模块ProxyHandler

from urllib import request
proxy_handler = request.ProxyHandler({           # 设置代理
    'http': 'http://218.202.111.10:80',          # ProxyHandler的参数是一个字典,key是协议类型,比如http
    'https': 'https://180.250.163.34:8888'}      # 或者https,value是代理链接,可以添加多个代理
)
opener = request.build_opener(proxy_handler)      #构建一个Opener 
response = opener.open('https://www.baidu.com')
print(response.read())

处理 Cookie模块HTTPCookieProcessor

# 显示cookie的名称和值
from http import cookiejar
from urllib import request
cookie = cookiejar.CookieJar()                        # 构建一个cookieJar对象
handler = request.HTTPCookieProcessor(cookie)         # 再创建一个handler
opener = request.build_opener(handler)
response = opener.open('http://www.baidu.com')
for item in cookie:
    print(item.name+'='+item.value)

如何保存cookie

from http import cookiejar
from urllib import request
filename = 'cookie.txt'
cookie = cookiejar.MozillaCookieJar(filename)          # cookiejar的子类,用来处理Cookie与文件相关的事件
handler = request.HTTPCookieProcessor(cookie)
opener = request.build_opener(handler)
response = opener.open('http://www.baidu.com')
cookie.save(ignore_discard=True, ignore_expires=True)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值