一般来说在使用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应用安全审计,发现了如此多的漏洞以至于我觉得对于开发来说全部推倒重写都比修掉发现的这么多漏洞省事。正…
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论