Python 20.21. cookielib模块翻译

Python 20.21.用于http客户端的处理的模块

By 白熊花田() 转载请注明出处,谢谢。

原文链接:https://docs.python.org/2/library/cookielib.html

标注:

cookielib模块已经在python3中改名为http.cookiejar了。2to3这个工具能够自动地在你将代码由python2.x转为python3.x帮你更正源码。

简介:

cookielib模块中定义了几个处理Http cookie的类。cookie是由web服务器返回给在客户端机器并保存在客户端机器的数据文件,并能在之后通过http请求发送给服务器。cookielib模块处理cookie文件很有用,支持网景协议和RFC 2965标准的cookie。通常默认是不处理RFC2965标准的cookie的。实际运行时,RFC2109标准的cookie一般按网景协议来解析继而将其转换成网景协议或者RFC2965标准的cookie。注意到,网上大部分的cookie都是网景协议。cookielib试图采用事实上的网景协议的cookie(当然,这个原本的网景协议差别还是挺大的),从RFC2965标准中引入了如max-age和port这样的cookie属性。

注意:这些命名参数可以在Set-Cookie和Set-Cookie2的头部可以找到,它们是cookie的属性。为了和python中的属性相区分,我们使用术语cookie-attribute来代替。

cookielib中定义了下列的异常类:

cookielib.LoadError

FileCookieJar会在加载cookie失败时抛出这个异常。

注意:为了向后兼容性,python2.4版本会抛出IOError异常,LoadError是IOError的子类。

cookielib还提供下列的类(简介其用途):

cookielib.CookieJar(policy=None)

policy是用来实现CookiePolicy接口的对象。

CookieJar类是用来存储HTTP cookie的。它能从HTTP请求中提取出cookie,然后在HTTP响应中返回cookie。CookieJar类的实例能适时的自动地使cookie过期。它的子类同样能够从文件或数据库中存取cookie。

cookie.FileCookieJar(filename,delayload=None, policy)

policy是用来实现CookiePolicy接口的对象。其他的参数,可以参考下面详细的文档。

CookieJar类能够从磁盘中加载或者保存cookie文件。cookie只能通过load()或者revert()函数来加载指定文件。它的子类介绍可以参照下面的文档。

cookielib.CookiePolicy

这个类是负责决定每一个cookie是否应该返回给服务器或者是从服务器接受它们。

cookielib.DefaultCookiePolicy(blocked_domains=None,allowed_domains=None, netscape=True, rfc2965=False, rfc2109_as_netscape=None,hide_cookie2=False, strict_domain=False, strict_rfc2965_unverifiable=True,strict_ns_unverifiable=False, strict_ns_domain=DefaultCookiePolicy.DomainLiberal,strict_ns_set_initial_dollar=False, strict_ns_set_path=False)

构造参数应该只传递关键参数就够了。blocked_domains是域名的元组,代表这一组被阻塞的域名元组(被阻塞意味着该域名的cookie将不被接收或者返回给服务器)。allowed_domains如果不为空(None)的话,代表一组能够被接受和返回的域名元组,当然设定了这组域名后,其他域名将不会被处理。其他的参数,请参看CookiePolicy和DefaultCookiePolicy类的中参数介绍。

DefaultCookiePolicy类实现了接收网景协议及RFC2965标准cookie的标准。在默认情况下,RFC2109类型的cookie(即cookie的Set-Cookie头部的cookie属性版本为1)会被按照处理RFC2965cookie的方式来处理。然而,在被设置成不处理RFC2965类型的cookie或者rfc_2109_as_netscape属性为True时,RFC2109类型的cookie会被CookieJar的实例转变成(通过设置cookie版本号为0)网景类型的cookie。DefaultCookiePolicy类同样提供了通过设置一些参数来进行cookie协议类型的转换。

cookielib.Cookie

这个类可以代表网景类型,RFC 2109或者RFC2965类型的cookie。我们并不期待用户会使用cookielib模块来创建自定义类型的cookie,但是,如果需要的话,可以使用make_cookies()来创建一个CookieJar的实例。

20.21.1. CookieJar和FileCookieJar 类

CookieJar类支持迭代器,可以通过迭代的方法获得cookie。

CookieJar有如下的方法:

CookieJar.add_cookie_header(request)

给request(请求)添加正确的cookie头部。

如果cookie类型符合的话(即CookieJar的CookiePolicy实例的属性满足rfc2965为True且hide_cookie2为False的话),Cookie2的头部仍然会在恰当的时候添加上去。

这个请求对象(通常是urllib2.Request的实例)必须支持urllib2中的get_full_url(),get_host(),get_type(),unverifiable(),get_origin_req_host(),has_header(),get_header(),header_items()和 add_unredirected_header()方法。

CookieJar.extract_cookies(response,request)

从HTTP响应中提取cookie并将其保存到相应的CookieJar中。

CookieJar能够在响应参数中找到Set-Cookie和Set-Cookie2的头部,并依此合理的储存这些cookie(当CookiePolicy.set_ok()返回True时)。

响应对象(通常是urllib2.urlopen()的返回值)应该支持info()方法,并且返回一个具有getallmatchingheaders()方法的对象(通常是mimetools.Message实例)。

请求对象(通常是urllib2.Request实例)必须支持urrlib2中的get_full_url(),get_host(), unverifiable()和get_origin_req_host()这四个方法。这个请求通常会将cookie属性设为默认值以便于检测该cookie是否可以被设置。

CookieJar.set_policy(policy)

将CookiePolicy实例设为可用。

CookieJar.make_cookies(response,request)

返回从响应对象中提取出的cookie列表。

请参阅extract_cookies()函数文档(上文有介绍)来了解必要的response(响应)和request(请求)的参数。

CookieJar.set_cookie_if_ok(cookie,request)

在cookie类型允许的条件下设置cookie

CookieJar.set_cookie(cookie)

在不检查cookie类型的条件下设置cookie

CookieJar.clear([domain[, path[,name]]])

清理cookie。

看看花儿冲破北疆漫漫寒冬,妖娆绽放;

Python 20.21. cookielib模块翻译

相关文章:

你感兴趣的文章:

标签云: