aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libmproxy/flow.py2
-rw-r--r--test/test_server.py13
2 files changed, 14 insertions, 1 deletions
diff --git a/libmproxy/flow.py b/libmproxy/flow.py
index b22be3f9..44dc57ae 100644
--- a/libmproxy/flow.py
+++ b/libmproxy/flow.py
@@ -735,6 +735,8 @@ class Response(HTTPMsg):
)
if self.content:
headers["Content-Length"] = [str(len(self.content))]
+ elif 'Transfer-Encoding' in self.headers:
+ headers["Content-Length"] = ["0"]
proto = "HTTP/%s.%s %s %s"%(self.httpversion[0], self.httpversion[1], self.code, str(self.msg))
data = (proto, str(headers))
return FMT%data
diff --git a/test/test_server.py b/test/test_server.py
index 182b969f..2c94b9df 100644
--- a/test/test_server.py
+++ b/test/test_server.py
@@ -143,7 +143,18 @@ class TestHTTP(tservers.HTTPProxTest, CommonMixin, AppMixin):
req = p.request("get:'http://foo':h':foo'='bar'")
assert req.status_code == 400
-
+ def test_empty_chunked_content(self):
+ """
+ https://github.com/mitmproxy/mitmproxy/issues/186
+ """
+ connection = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+ connection.connect(("127.0.0.1", self.proxy.port))
+ spec = '301:h"Transfer-Encoding"="chunked":r:b"0\\r\\n\\r\\n"'
+ connection.send("GET http://localhost:%d/p/%s HTTP/1.1\r\n"%(self.server.port, spec))
+ connection.send("\r\n");
+ resp = connection.recv(50000)
+ connection.close()
+ assert "content-length" in resp.lower()
class TestHTTPAuth(tservers.HTTPProxTest):
authenticator = http_auth.BasicProxyAuth(http_auth.PassManSingleUser("test", "test"), "realm")