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

  • A+
所属分类:安全博客

一般来说在使用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的管理之下了。

FROM :https://blog.flanker017.me/ | Author:Flanker

相关推荐: [译]当EFBFBD来敲门 – 对Java中字符串与byte数组转换的观察及相关的安全隐患

当EFBFBD来敲门 – 对Java中字符串与byte数组转换对一个观察及相关的安全隐患 我(指原作者,下文同)正在进行一个激动人心的Android应用安全审计,发现了如此多的漏洞以至于我觉得对于开发来说全部推倒重写都比修掉发现的这么多漏洞省事。正…

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: