urllib2

与urllib的区别

urllib2提供了Request,可以更好的表达请求,可以定制url的头,提供更强大的功能,可以处理cookie, 鉴权可定制化,头信息的格式为字典

urllib2不能完全替代urllib:urllib.urlencode()这个方法在urllib2没有所以一般urllib和urllib2混用


urllib2.urlopen() 超时时间,时间内链接不到远程服务器就会直接报错
还可以捕获HTTPError错误



urllib2.Request()  



urlopen不仅可以接受一个url作为参数,还可以接受一个Request对象作为参数



还提供了比较重要的接口
build_opener   可以让我们定制Http行为,它有一个open方法和urlopen同样效果

参数Handler列表
当Http请求应答回来的时候会像管道一样依次执行HTTPHandler,HTTPSHander,HTTPCookieProcessor
返回openerDirector里面有open()方法处理原来链接里面的数据

BaseHandler为

使用什么代理
不知道什么协议
处理HTTP请求
处理错误请求
处理跳转
支持FTP协议
支持本地文件打开
处理HTTP错误
处理ssl
当调用urllib2.urlopen()的时候会调用系统默认创建的Handler链


urllib2.HTTPHandler(debuglevel=1)
会把HTTP请求跟服务器交互信息都打印出来

等于说是在Request头信息包括data信息都设置好,然后在build_opener下面的open打开,而build_opener可以定制HTTPHandler等信息,如这个例子显示跟服务器交互的信息,



opener保存为全局使用
    

所以我认为bulid_opener就是对urlopen的封装,可以使用它的install_opener对全局的opener进行同样处理



cookies处理
cookie是网页交互过程中很重要的隐式数据,有服务器生成保存在客户端,客户端请求时把cookie返回给服务器,服务器再进行解析。    

比如说登录的之后,服务器生成cookie,客户端通过cookie告诉服务端已经登录上去了


HTTPCookieProcessor是Basehandler的子类


cookie的加法跟request 的加法不同,只需要加载头信息就可以了

cookie在handler当中加载
这里的open是带有cookie的信息的,第一次是open是返回到客户端,随后在用open的时候
会将cookie自动上传到服务器,所以只需要在开始open一次,想登录验证一次就可以一直出于登录的状态了,cookie就相当于是登录凭证










































posted @ 2016-08-08 16:24  意发并行  阅读(220)  评论(0编辑  收藏  举报