Python中直接从字符串读入cookie的方法

一般来说在使用cookielib的CookieJar时,如果想手动设置header中的cookie字段,需要使用MozillaCookieJar从cookie文件载入,这显然太不方便了,如果直接对每一个请求set-header又相当于需要完全自己管理cookie,放弃了urllib2提供的HttpCookieProcessor。有没有两全其美的办法?
读了会源码,发现Cookie库提供的SimpleCookie可以从raw string解析,但是它并不能用于CookieJar的set_cookie方法中,因为CookieJar事实上接受的是cookielib.cookie这个类型… 但仍然可以利用SimpleCookie的解析方式,提取出raw string的value pair,调用cookielib.cookie的构造函数传入set_cookie中。

于是一个简单的wrapper如下:

import Cookie
import urllib2
import cookielib
from cookielib import Cookie as libcookie
def parse(rawstr,url):
    url = '.'+'.'.join(url.split('.')[1:])
    c = Cookie.SimpleCookie()
    c.load(rawstr)
    ret = []
    for k in c:
        #get v as Morsel Object
        v = c[k]
        ret.append(libcookie(
                    name=v.key,
                    value = v.value,
                    version=0,
                    port=None,
                    port_specified = False,
                    domain=url,
                    domain_specified=True,
                    domain_initial_dot=True,
                    path='/',
                    path_specified=True,
                    secure=False,
                    expires=None,
                    discard=False,
                    comment=None,
                    comment_url=None,
                    rest={'HttpOnly': None},
                    rfc2109=False,
        ))
    return ret

返回一个可用于CookieJar.set_cookie的cookie list

cookie = cookielib.CookieJar()
cs = parse("anonymid=h7iy6p2z-l2catp; _r01_=1;","www.renren.com")
for c in cs:
    cookie.set_cookie(c)
print cookie
cookieProc = urllib2.HTTPCookieProcessor(cookie)
opener = urllib2.build_opener(cookieProc)
urllib2.install_opener(opener)

这样就可以从字符串指定cookie并且将其纳入cookiejar的管理之下了。

Leave a Reply

Your email address will not be published. Required fields are marked *