aboutsummaryrefslogtreecommitdiffstats
path: root/netlib
diff options
context:
space:
mode:
authorMaximilian Hils <git@maximilianhils.com>2016-07-07 17:29:22 -0700
committerMaximilian Hils <git@maximilianhils.com>2016-07-07 17:29:22 -0700
commitf62e976e1e0245665aeeb08fa801661d6c766ba8 (patch)
tree78ddb1632756d75aed26a30ada6f0a0a978c06f4 /netlib
parentacca8e5253878d6a346a15a0f64154bdbde49a98 (diff)
downloadmitmproxy-f62e976e1e0245665aeeb08fa801661d6c766ba8.tar.gz
mitmproxy-f62e976e1e0245665aeeb08fa801661d6c766ba8.tar.bz2
mitmproxy-f62e976e1e0245665aeeb08fa801661d6c766ba8.zip
py3++
Diffstat (limited to 'netlib')
-rw-r--r--netlib/http/message.py3
-rw-r--r--netlib/http/request.py14
-rw-r--r--netlib/http/response.py7
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