You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
53 lines
1.8 KiB
53 lines
1.8 KiB
try:
|
|
import Cookie
|
|
except:
|
|
import http.cookies as Cookie
|
|
|
|
|
|
class SimpleCookieJar(object):
|
|
def __init__(self):
|
|
self.jar = dict()
|
|
|
|
def add(self, set_cookie):
|
|
if set_cookie:
|
|
try:
|
|
simpleCookie = Cookie.SimpleCookie(set_cookie)
|
|
except:
|
|
simpleCookie = Cookie.SimpleCookie(set_cookie.encode('ascii', 'ignore'))
|
|
|
|
for k, v in simpleCookie.items():
|
|
domain = v.get("domain")
|
|
if domain:
|
|
if not domain.startswith("."):
|
|
domain = "." + domain
|
|
cookie = self.jar.get(domain) if self.jar.get(domain) else Cookie.SimpleCookie()
|
|
cookie.update(simpleCookie)
|
|
self.jar[domain.lower()] = cookie
|
|
|
|
def set(self, set_cookie):
|
|
if set_cookie:
|
|
try:
|
|
simpleCookie = Cookie.SimpleCookie(set_cookie)
|
|
except:
|
|
simpleCookie = Cookie.SimpleCookie(set_cookie.encode('ascii', 'ignore'))
|
|
|
|
for k, v in simpleCookie.items():
|
|
domain = v.get("domain")
|
|
if domain:
|
|
if not domain.startswith("."):
|
|
domain = "." + domain
|
|
self.jar[domain.lower()] = simpleCookie
|
|
|
|
def get(self, host):
|
|
if not host:
|
|
return ""
|
|
|
|
cookies = []
|
|
for domain, simpleCookie in self.jar.items():
|
|
host = host.lower()
|
|
if host.endswith(domain) or host == domain[1:]:
|
|
cookies.append(self.jar.get(domain))
|
|
|
|
return "; ".join(filter(None, ["%s=%s" % (k, v.value) for cookie in filter(None, sorted(cookies)) for k, v in
|
|
sorted(cookie.items())]))
|