aboutsummaryrefslogtreecommitdiffstats
path: root/netlib/http
diff options
context:
space:
mode:
authorThomas Kriechbaumer <thomas@kriechbaumer.name>2016-05-08 13:13:48 -0500
committerThomas Kriechbaumer <thomas@kriechbaumer.name>2016-05-10 11:13:12 -0500
commit08002282e84394cb86508c51f2d7adfd1ece6da4 (patch)
tree2eb50695b55cdc2bf65e1e47211cdfb23d2cd6b4 /netlib/http
parent595a01de4e141eb494c2f698e3177c24071ca461 (diff)
downloadmitmproxy-08002282e84394cb86508c51f2d7adfd1ece6da4.tar.gz
mitmproxy-08002282e84394cb86508c51f2d7adfd1ece6da4.tar.bz2
mitmproxy-08002282e84394cb86508c51f2d7adfd1ece6da4.zip
improve cookie parsing
allows '/' to be within a cookie name removes deprecated cookie getter/setter fixes #1118
Diffstat (limited to 'netlib/http')
-rw-r--r--netlib/http/cookies.py39
-rw-r--r--netlib/http/request.py8
-rw-r--r--netlib/http/response.py10
3 files changed, 20 insertions, 37 deletions
diff --git a/netlib/http/cookies.py b/netlib/http/cookies.py
index caa84ff7..2d5c18ca 100644
--- a/netlib/http/cookies.py
+++ b/netlib/http/cookies.py
@@ -1,5 +1,6 @@
from six.moves import http_cookies as Cookie
import re
+import string
from email.utils import parsedate_tz, formatdate, mktime_tz
from .. import odict
@@ -27,7 +28,6 @@ variants. Serialization follows RFC6265.
# TODO: Disallow LHS-only Cookie values
-
def _read_until(s, start, term):
"""
Read until one of the characters in term is reached.
@@ -203,25 +203,26 @@ def refresh_set_cookie_header(c, delta):
Returns:
A refreshed Set-Cookie string
"""
- try:
- c = Cookie.SimpleCookie(str(c))
- except Cookie.CookieError:
+
+ name, value, attrs = parse_set_cookie_header(c)
+ if not name or not value:
raise ValueError("Invalid Cookie")
- for i in c.values():
- if "expires" in i:
- d = parsedate_tz(i["expires"])
- if d:
- d = mktime_tz(d) + delta
- i["expires"] = formatdate(d)
- else:
- # This can happen when the expires tag is invalid.
- # reddit.com sends a an expires tag like this: "Thu, 31 Dec
- # 2037 23:59:59 GMT", which is valid RFC 1123, but not
- # strictly correct according to the cookie spec. Browsers
- # appear to parse this tolerantly - maybe we should too.
- # For now, we just ignore this.
- del i["expires"]
- ret = c.output(header="").strip()
+
+ if "expires" in attrs:
+ e = parsedate_tz(attrs["expires"][0])
+ if e:
+ f = mktime_tz(e) + delta
+ attrs["expires"] = [formatdate(f)]
+ else:
+ # This can happen when the expires tag is invalid.
+ # reddit.com sends a an expires tag like this: "Thu, 31 Dec
+ # 2037 23:59:59 GMT", which is valid RFC 1123, but not
+ # strictly correct according to the cookie spec. Browsers
+ # appear to parse this tolerantly - maybe we should too.
+ # For now, we just ignore this.
+ del attrs["expires"]
+
+ ret = format_set_cookie_header(name, value, attrs)
if not ret:
raise ValueError("Invalid Cookie")
return ret
diff --git a/netlib/http/request.py b/netlib/http/request.py
index 67aa17ce..a42150ff 100644
--- a/netlib/http/request.py
+++ b/netlib/http/request.py
@@ -343,14 +343,6 @@ class Request(Message):
# Legacy
- def get_cookies(self): # pragma: no cover
- warnings.warn(".get_cookies is deprecated, use .cookies instead.", DeprecationWarning)
- return self.cookies
-
- def set_cookies(self, odict): # pragma: no cover
- warnings.warn(".set_cookies is deprecated, use .cookies instead.", DeprecationWarning)
- self.cookies = odict
-
def get_query(self): # pragma: no cover
warnings.warn(".get_query is deprecated, use .query instead.", DeprecationWarning)
return self.query or ODict([])
diff --git a/netlib/http/response.py b/netlib/http/response.py
index efd7f60a..2f06149e 100644
--- a/netlib/http/response.py
+++ b/netlib/http/response.py
@@ -127,13 +127,3 @@ class Response(Message):
c.append(refreshed)
if c:
self.headers.set_all("set-cookie", c)
-
- # Legacy
-
- def get_cookies(self): # pragma: no cover
- warnings.warn(".get_cookies is deprecated, use .cookies instead.", DeprecationWarning)
- return self.cookies
-
- def set_cookies(self, odict): # pragma: no cover
- warnings.warn(".set_cookies is deprecated, use .cookies instead.", DeprecationWarning)
- self.cookies = odict