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方法,就会调用。