一般来说在使用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
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论