diff options
author | Maximilian Hils <git@maximilianhils.com> | 2016-07-07 17:29:22 -0700 |
---|---|---|
committer | Maximilian Hils <git@maximilianhils.com> | 2016-07-07 17:29:22 -0700 |
commit | f62e976e1e0245665aeeb08fa801661d6c766ba8 (patch) | |
tree | 78ddb1632756d75aed26a30ada6f0a0a978c06f4 /netlib/http | |
parent | acca8e5253878d6a346a15a0f64154bdbde49a98 (diff) | |
download | mitmproxy-f62e976e1e0245665aeeb08fa801661d6c766ba8.tar.gz mitmproxy-f62e976e1e0245665aeeb08fa801661d6c766ba8.tar.bz2 mitmproxy-f62e976e1e0245665aeeb08fa801661d6c766ba8.zip |
py3++
Diffstat (limited to 'netlib/http')
-rw-r--r-- | netlib/http/message.py | 3 | ||||
-rw-r--r-- | netlib/http/request.py | 14 | ||||
-rw-r--r-- | netlib/http/response.py | 7 |
3 files changed, 23 insertions, 1 deletions
diff --git a/netlib/http/message.py b/netlib/http/message.py index 0583c246..b268fec9 100644 --- a/netlib/http/message.py +++ b/netlib/http/message.py @@ -100,7 +100,10 @@ class Message(basetypes.Serializable): @content.setter def content(self, content): + # type: (Optional[bytes]) -> None self.data.content = content + if isinstance(content, six.text_type): + raise ValueError("Message content must be bytes, not {}".format(type(content).__name__)) if isinstance(content, bytes): self.headers["content-length"] = str(len(content)) diff --git a/netlib/http/request.py b/netlib/http/request.py index d9f4ed00..c4c39942 100644 --- a/netlib/http/request.py +++ b/netlib/http/request.py @@ -23,8 +23,20 @@ host_header_re = re.compile(r"^(?P<host>[^:]+|\[.+\])(?::(?P<port>\d+))?$") class RequestData(message.MessageData): def __init__(self, first_line_format, method, scheme, host, port, path, http_version, headers=(), content=None, timestamp_start=None, timestamp_end=None): + if isinstance(method, six.text_type): + method = method.encode("ascii", "strict") + if isinstance(scheme, six.text_type): + scheme = scheme.encode("ascii", "strict") + if isinstance(host, six.text_type): + host = host.encode("idna", "strict") + if isinstance(path, six.text_type): + path = path.encode("ascii", "strict") + if isinstance(http_version, six.text_type): + http_version = http_version.encode("ascii", "strict") if not isinstance(headers, nheaders.Headers): headers = nheaders.Headers(headers) + if isinstance(content, six.text_type): + raise ValueError("Content must be bytes, not {}".format(type(content).__name__)) self.first_line_format = first_line_format self.method = method @@ -356,7 +368,7 @@ class Request(message.Message): This will overwrite the existing content if there is one. """ self.headers["content-type"] = "application/x-www-form-urlencoded" - self.content = netlib.http.url.encode(value) + self.content = netlib.http.url.encode(value).encode() @urlencoded_form.setter def urlencoded_form(self, value): diff --git a/netlib/http/response.py b/netlib/http/response.py index 17d69418..7cfb55c8 100644 --- a/netlib/http/response.py +++ b/netlib/http/response.py @@ -2,6 +2,7 @@ from __future__ import absolute_import, print_function, division from email.utils import parsedate_tz, formatdate, mktime_tz import time +import six from netlib.http import cookies from netlib.http import headers as nheaders @@ -13,8 +14,14 @@ from netlib import human class ResponseData(message.MessageData): def __init__(self, http_version, status_code, reason=None, headers=(), content=None, timestamp_start=None, timestamp_end=None): + if isinstance(http_version, six.text_type): + http_version = http_version.encode("ascii", "strict") + if isinstance(reason, six.text_type): + reason = reason.encode("ascii", "strict") if not isinstance(headers, nheaders.Headers): headers = nheaders.Headers(headers) + if isinstance(content, six.text_type): + raise ValueError("Content must be bytes, not {}".format(type(content).__name__)) self.http_version = http_version self.status_code = status_code |