aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAldo Cortesi <aldo@corte.si>2014-01-04 14:37:47 -0800
committerAldo Cortesi <aldo@corte.si>2014-01-04 14:37:47 -0800
commitd5f9b02615bffe56639a7250f31752cebd2b8d62 (patch)
treebd754bc9bef4ab40103cf37594c2d790f00c1896
parent7d37e0ce10d6684c237833b85280c922ba2926de (diff)
parentf4b58ba495f5faefbfdd85ae15532cf36e2f74c9 (diff)
downloadmitmproxy-d5f9b02615bffe56639a7250f31752cebd2b8d62.tar.gz
mitmproxy-d5f9b02615bffe56639a7250f31752cebd2b8d62.tar.bz2
mitmproxy-d5f9b02615bffe56639a7250f31752cebd2b8d62.zip
Merge pull request #192 from mitmproxy/refactor_read_http_body
move CONTINUE checks into mitmproxy
-rw-r--r--libmproxy/proxy.py18
-rw-r--r--test/test_server.py8
2 files changed, 18 insertions, 8 deletions
diff --git a/libmproxy/proxy.py b/libmproxy/proxy.py
index 69e5f411..15f75b8d 100644
--- a/libmproxy/proxy.py
+++ b/libmproxy/proxy.py
@@ -424,8 +424,9 @@ class ProxyHandler(tcp.BaseHandler):
raise ProxyError(400, "Bad HTTP request line: %s"%repr(line))
method, scheme, host, port, path, httpversion = r
headers = self.read_headers(authenticate=True)
- content = http.read_http_body_request(
- self.rfile, self.wfile, headers, httpversion, self.config.body_size_limit
+ self.handle_expect_header(headers, httpversion)
+ content = http.read_http_body(
+ self.rfile, headers, self.config.body_size_limit, True
)
r = flow.Request(
client_conn, httpversion, host, port, scheme, method, path, headers, content,
@@ -457,8 +458,9 @@ class ProxyHandler(tcp.BaseHandler):
raise ProxyError(400, "Bad HTTP request line: %s"%repr(line))
method, path, httpversion = r
headers = self.read_headers(authenticate=False)
- content = http.read_http_body_request(
- self.rfile, self.wfile, headers, httpversion, self.config.body_size_limit
+ self.handle_expect_header(headers, httpversion)
+ content = http.read_http_body(
+ self.rfile, headers, self.config.body_size_limit, True
)
r = flow.Request(
client_conn, httpversion, host, port, scheme, method, path, headers, content,
@@ -467,6 +469,14 @@ class ProxyHandler(tcp.BaseHandler):
r.set_live(self.rfile, self.wfile)
return r
+ def handle_expect_header(self, headers, httpversion):
+ if "expect" in headers:
+ if "100-continue" in headers['expect'] and httpversion >= (1, 1):
+ #FIXME: Check if content-length is over limit
+ self.wfile.write('HTTP/1.1 100 Continue\r\n'
+ '\r\n')
+ del headers['expect']
+
def read_headers(self, authenticate=False):
headers = http.read_headers(self.rfile)
if headers is None:
diff --git a/test/test_server.py b/test/test_server.py
index 2c94b9df..646460ab 100644
--- a/test/test_server.py
+++ b/test/test_server.py
@@ -176,10 +176,10 @@ class TestHTTPAuth(tservers.HTTPProxTest):
class TestHTTPConnectSSLError(tservers.HTTPProxTest):
certfile = True
def test_go(self):
- p = self.pathoc()
- req = "connect:'localhost:%s'"%self.proxy.port
- assert p.request(req).status_code == 200
- assert p.request(req).status_code == 400
+ p = self.pathoc_raw()
+ dst = ("localhost", self.proxy.port)
+ p.connect(connect_to=dst)
+ tutils.raises("400 - Bad Request", p.http_connect, dst)
class TestHTTPS(tservers.HTTPProxTest, CommonMixin):