aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libmproxy/protocol/http.py25
-rw-r--r--test/test_protocol_http.py22
2 files changed, 31 insertions, 16 deletions
diff --git a/libmproxy/protocol/http.py b/libmproxy/protocol/http.py
index 94077e42..cd9458f2 100644
--- a/libmproxy/protocol/http.py
+++ b/libmproxy/protocol/http.py
@@ -6,7 +6,7 @@ import time
import copy
from email.utils import parsedate_tz, formatdate, mktime_tz
import threading
-from netlib import http, tcp, http_status
+from netlib import http, tcp, http_status, http_cookies
import netlib.utils
from netlib import odict
from .tcp import TCPHandler
@@ -670,15 +670,22 @@ class HTTPRequest(HTTPMessage):
self.scheme, self.host, self.port, self.path = parts
def get_cookies(self):
- cookie_headers = self.headers.get("cookie")
- if not cookie_headers:
- return None
+ """
- cookies = []
- for header in cookie_headers:
- pairs = [pair.partition("=") for pair in header.split(';')]
- cookies.extend((pair[0], (pair[2], {})) for pair in pairs)
- return dict(cookies)
+ Returns a possibly empty netlib.odict.ODict object.
+ """
+ ret = odict.ODict()
+ for i in self.headers["cookie"]:
+ ret.extend(http_cookies.parse_cookie_header(i))
+ return ret
+
+ def set_cookies(self, odict):
+ """
+ Takes an netlib.odict.ODict object. Over-writes any existing Cookie
+ headers.
+ """
+ v = http_cookies.format_cookie_header(odict)
+ self.headers["Cookie"] = [v]
def replace(self, pattern, repl, *args, **kwargs):
"""
diff --git a/test/test_protocol_http.py b/test/test_protocol_http.py
index 6b949ce3..11ab503b 100644
--- a/test/test_protocol_http.py
+++ b/test/test_protocol_http.py
@@ -161,7 +161,7 @@ class TestHTTPRequest:
h = odict.ODictCaseless()
r = tutils.treq()
r.headers = h
- assert r.get_cookies() is None
+ assert len(r.get_cookies()) == 0
def test_get_cookies_single(self):
h = odict.ODictCaseless()
@@ -170,7 +170,7 @@ class TestHTTPRequest:
r.headers = h
result = r.get_cookies()
assert len(result)==1
- assert result['cookiename']==('cookievalue',{})
+ assert result['cookiename']==['cookievalue']
def test_get_cookies_double(self):
h = odict.ODictCaseless()
@@ -179,8 +179,8 @@ class TestHTTPRequest:
r.headers = h
result = r.get_cookies()
assert len(result)==2
- assert result['cookiename']==('cookievalue',{})
- assert result['othercookiename']==('othercookievalue',{})
+ assert result['cookiename']==['cookievalue']
+ assert result['othercookiename']==['othercookievalue']
def test_get_cookies_withequalsign(self):
h = odict.ODictCaseless()
@@ -189,10 +189,18 @@ class TestHTTPRequest:
r.headers = h
result = r.get_cookies()
assert len(result)==2
- assert result['cookiename']==('coo=kievalue',{})
- assert result['othercookiename']==('othercookievalue',{})
-
+ assert result['cookiename']==['coo=kievalue']
+ assert result['othercookiename']==['othercookievalue']
+ def test_set_cookies(self):
+ h = odict.ODictCaseless()
+ h["Cookie"] = ["cookiename=cookievalue"]
+ r = tutils.treq()
+ r.headers = h
+ result = r.get_cookies()
+ result["cookiename"] = ["foo"]
+ r.set_cookies(result)
+ assert r.get_cookies()["cookiename"] == ["foo"]
class TestHTTPResponse: