diff options
author | tifayuki <tifayuki@gmail.com> | 2016-12-21 16:25:52 -0800 |
---|---|---|
committer | tifayuki <tifayuki@gmail.com> | 2016-12-21 16:28:14 -0800 |
commit | e174c0350db6180e38e10c210078ad6515c5f039 (patch) | |
tree | 09ada81ff9730984a6913f0caf5fbf22d34fd70c /websocket/_cookiejar.py | |
parent | 7d682da323f421241ed11dcf797d9baa15e2debe (diff) | |
download | websocket-client-e174c0350db6180e38e10c210078ad6515c5f039.tar.gz |
Implement simple cookie jar
Diffstat (limited to 'websocket/_cookiejar.py')
-rw-r--r-- | websocket/_cookiejar.py | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/websocket/_cookiejar.py b/websocket/_cookiejar.py new file mode 100644 index 0000000..8a30352 --- /dev/null +++ b/websocket/_cookiejar.py @@ -0,0 +1,52 @@ +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 + cookie.items()])) |