diff options
author | Aldo Cortesi <aldo@corte.si> | 2014-01-04 14:37:47 -0800 |
---|---|---|
committer | Aldo Cortesi <aldo@corte.si> | 2014-01-04 14:37:47 -0800 |
commit | d5f9b02615bffe56639a7250f31752cebd2b8d62 (patch) | |
tree | bd754bc9bef4ab40103cf37594c2d790f00c1896 | |
parent | 7d37e0ce10d6684c237833b85280c922ba2926de (diff) | |
parent | f4b58ba495f5faefbfdd85ae15532cf36e2f74c9 (diff) | |
download | mitmproxy-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.py | 18 | ||||
-rw-r--r-- | test/test_server.py | 8 |
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): |