高级用法 (都不是很懂,所以看之后实践过程中使用吧)
更强大的工具Handler登场 ,可以理解为各种处理器,有专门处理登陆验证的,有处理cookies的,有处理代理设置的。利用它们,我们几乎可以做到HTTP请求中的所有事。
首先介绍的BaseHandler类,它是所有Handler的父类,它提供了最基本的方法,例如default_open()、protocol_request()等
接下来,就有各种Handler子类继承这个BaseHandler类,举例如下:
HTTPDefaultErrorHandler:用于处理HTTP响应错误,错误都会抛出HTTPError类型的异常。
HTTPRedirectHandler:用于处理重定向(什么是重定向)
HTTPCookieProcessor:用于处理Cookies
ProxyHandler:用于设置代理,默认代理为空
HTTPPasswordMgr:用于管理密码,它维护 了用户名和密码的表
HTTPBasicAuthHandler:用于管理认证,如果一个链接打开时
1.验证
from urllib import request,error
username='username'
password='password'
url='http://localhost:5000/'
创建密码管理对象,用来保存需要处理的用户名和密码
p=request.HTTPPasswordMgrWithDefaultRealm()
添加账户信息,第一个参数realm是与远程服务器相关的域信息,一般没人管它都是写None,后面三个参数分别是 代理服务器、用户名、密码
p.add_password(None,url,username,password)
auth_handler=request.HTTPBasicAuthHandler(p)
opener=request.build_opener(auth_handler)
try:
response=opener.open(url)
html=response.read().decode('utf-8')
print(html)
except error.URLError as e:
print(e.reason)#错误原因
这里首先实例化了HTTPBasicAuthHandler对象,其参数是HTTPPasswordMgrWithDefaultRealm对象,它利用add_password()添加进去用户名和密码,这样就建立了一个处理验证的Handler。
接下来,利用这个Handler并使用b