Python3:urllib.request详解

request模块主要了解opener和handler这两个概念,其他的就很好解决了。


函数:

urlopen():打开一个url,可以传url或者request
有ssl相关参数,暂时不管。
如果没有opener,会自己构造一个,有就用现成的
其实就是调用opener.open()函数。

install_opener():安装一个opener作为默认的opener。

build_opener():
创造一个OpenerDirector实例,自带一堆默认的handler.
如果自己要安装一些handler,则会替换掉handler的父类或者默认类。
传递进去的参数会被打包成一个元组。
handler是挂在OpenerDirector上的。

pathname2url:文件路径转换成URL
url2pathname:URL转换成文件路径

getproxies:获得代理

传统接口 Legacy interface
urlretrieve():将远程数据下载,然后保存到本地。
    filename指定保存的路径,reporthook是一个回调函数,data是post的数据
如果不指定文件名,则存放为临时文件。看来之前自己写的额外保存,是没必要的。

urlcleanup():清除由于urllib.urlretrieve()所产生的缓存,清除opener

request_host():从request中获得目标主机名,应该就是域名吧。

thishost():当前主机ip地址

localhost():返回localhost的地址
============类=============
Request保存每一次请求相关信息的对象
headers头的参数,字典类型
_data访问url传递的参数
还有一些基本的get和set操作方法。
OpenerDirector管理Handler来干实际的工作。每个Handler实现各自的协议或者选项。
每个类型的handler只能有一个,不能重复添加。

BaseHandler:
所有handler都继承了它
按我的理解,是不能直接继承这个类的,只能继承它的子类。
handler的函数,基本是写死在代码里面的。

HTTPDefaultErrorHandler:
默认的错误处理类,其实就是抛出异常。估计是让程序员自己去继承

HTTPRedirectHandler:
重定向处理
最多可以重定向10词

HTTPCookieProcessor:处理cookie。我就不明白为什么不是所有的handler都叫handler
默认里面自己构建了一个CookieJar对象。
就是在请求的时候加上本地cookie,在返回的时候更新本地cookie

ProxyHandler:用代理打开网页。

HTTPPasswordMgr:处理密码信息。这不是一个handler
这个类并没有继承BaseHandler。它自己就是一个基类。
好像是http认证相关的东西。好像就是登录,只不过跟我们平时认知的登录有所不同。
HTTPPasswordMgrWithDefaultRealm:继承了HTTPPasswordMgr更方便的类。

AbstractBasicAuthHandler:
虽然叫handler,但是没有继承BaseHandler。
也是http认证的东西,这是抽象类。
它的子类是有继承BaseHandler的。
HTTPBasicAuthHandler:认证相关
ProxyBasicAuthHandler:开了代理的时候用的认证
AbstractDigestAuthHandler:摘要验证处理
HTTPDigestAuthHandler:摘要验证处理
ProxyDigestAuthHandler:摘要验证处理

AbstractHTTPHandler:http处理,do_open() 方法,是 HTTP 连接的核心
HTTPHandler:
这个类里有个 http_open() 方法,它会被安置在 OpenerDirector 对象的 handle_open list 中
很明显它是管理 HTTP 连接的,发送或者接受数据,其内部调用上面提到的 do_open() 方法
FileHandler:处理本地文件或者 ftp,这要视被传入的 url 而定

FTPHandler:封装了ftp的处理
CacheFTPHandler:带缓存的 FTPHandler
里面主要记录最近 ftp 连接的信息(实际上是 ftpwrapper 对象)
并各自设置了过期时间。

DataHandler:好像是把表单数据传输前进行base64加密

UnknownHandler:里面定义了 unknown_open 方法;当遇到无法理解的 url 时候,就会被调用

HTTPErrorProcessor:错误处理

URLopener:用来打开URL的类,不想进行特殊错误处理的时候用这个。
tempcache缓存下来的网页,可以放多个url

FancyURLopener:继承了URLopener,另外定义了一些错误处理方式,例如302重定向等。
出现特殊状态码的时候,URLopener将调用http_error方法,如果存在http_error_xx方法,就会调用。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值