diff options
Diffstat (limited to 'mitmproxy')
-rw-r--r-- | mitmproxy/net/http/http1/assemble.py | 11 | ||||
-rw-r--r-- | mitmproxy/net/http/http1/read.py | 34 | ||||
-rw-r--r-- | mitmproxy/tools/cmdline.py | 2 | ||||
-rw-r--r-- | mitmproxy/tools/web/master.py | 4 | ||||
-rw-r--r-- | mitmproxy/tools/web/webaddons.py | 6 |
5 files changed, 25 insertions, 32 deletions
diff --git a/mitmproxy/net/http/http1/assemble.py b/mitmproxy/net/http/http1/assemble.py index 8b7246f7..d30a74a1 100644 --- a/mitmproxy/net/http/http1/assemble.py +++ b/mitmproxy/net/http/http1/assemble.py @@ -1,4 +1,3 @@ -import mitmproxy.net.http.url from mitmproxy import exceptions @@ -78,15 +77,7 @@ def _assemble_request_headers(request_data): Args: request_data (mitmproxy.net.http.request.RequestData) """ - headers = request_data.headers - if "host" not in headers and request_data.scheme and request_data.host and request_data.port: - headers = headers.copy() - headers["host"] = mitmproxy.net.http.url.hostport( - request_data.scheme, - request_data.host, - request_data.port - ) - return bytes(headers) + return bytes(request_data.headers) def _assemble_response_line(response_data): diff --git a/mitmproxy/net/http/http1/read.py b/mitmproxy/net/http/http1/read.py index 294e8358..0fc03f1b 100644 --- a/mitmproxy/net/http/http1/read.py +++ b/mitmproxy/net/http/http1/read.py @@ -2,6 +2,8 @@ import time import sys import re +import typing + from mitmproxy.net.http import request from mitmproxy.net.http import response from mitmproxy.net.http import headers @@ -171,8 +173,15 @@ def connection_close(http_version, headers): return http_version != "HTTP/1.1" and http_version != b"HTTP/1.1" -def expected_http_body_size(request, response=None): +def expected_http_body_size( + request: request.Request, + response: typing.Optional[response.Response] = None, + expect_continue_as_0: bool = True +): """ + Args: + - expect_continue_as_0: If true, incorrectly predict a body size of 0 for requests which are waiting + for a 100 Continue response. Returns: The expected body length: - a positive integer, if the size is known in advance @@ -186,24 +195,17 @@ def expected_http_body_size(request, response=None): # http://tools.ietf.org/html/rfc7230#section-3.3 if not response: headers = request.headers - response_code = None - is_request = True - else: - headers = response.headers - response_code = response.status_code - is_request = False - - if is_request: - if headers.get("expect", "").lower() == "100-continue": + if expect_continue_as_0 and headers.get("expect", "").lower() == "100-continue": return 0 else: + headers = response.headers if request.method.upper() == "HEAD": return 0 - if 100 <= response_code <= 199: + if 100 <= response.status_code <= 199: return 0 - if response_code == 200 and request.method.upper() == "CONNECT": + if response.status_code == 200 and request.method.upper() == "CONNECT": return 0 - if response_code in (204, 304): + if response.status_code in (204, 304): return 0 if "chunked" in headers.get("transfer-encoding", "").lower(): @@ -218,9 +220,9 @@ def expected_http_body_size(request, response=None): if size < 0: raise ValueError() return size - except ValueError: - raise exceptions.HttpSyntaxException("Unparseable Content Length") - if is_request: + except ValueError as e: + raise exceptions.HttpSyntaxException("Unparseable Content Length") from e + if not response: return 0 return -1 diff --git a/mitmproxy/tools/cmdline.py b/mitmproxy/tools/cmdline.py index e9ff973f..9c8eae8a 100644 --- a/mitmproxy/tools/cmdline.py +++ b/mitmproxy/tools/cmdline.py @@ -127,7 +127,7 @@ def mitmweb(opts): group = parser.add_argument_group("Mitmweb") opts.make_parser(group, "web_open_browser") opts.make_parser(group, "web_port", metavar="PORT") - opts.make_parser(group, "web_iface", metavar="INTERFACE") + opts.make_parser(group, "web_host", metavar="HOST") common_options(parser, opts) group = parser.add_argument_group( diff --git a/mitmproxy/tools/web/master.py b/mitmproxy/tools/web/master.py index 17845106..d127bdec 100644 --- a/mitmproxy/tools/web/master.py +++ b/mitmproxy/tools/web/master.py @@ -105,8 +105,8 @@ class WebMaster(master.Master): AsyncIOMainLoop().install() iol = tornado.ioloop.IOLoop.instance() http_server = tornado.httpserver.HTTPServer(self.app) - http_server.listen(self.options.web_port, self.options.web_iface) - web_url = "http://{}:{}/".format(self.options.web_iface, self.options.web_port) + http_server.listen(self.options.web_port, self.options.web_host) + web_url = "http://{}:{}/".format(self.options.web_host, self.options.web_port) self.log.info( "Web server listening at {}".format(web_url), ) diff --git a/mitmproxy/tools/web/webaddons.py b/mitmproxy/tools/web/webaddons.py index ba3bdead..bd85651a 100644 --- a/mitmproxy/tools/web/webaddons.py +++ b/mitmproxy/tools/web/webaddons.py @@ -18,13 +18,13 @@ class WebAddon: "Web UI port." ) loader.add_option( - "web_iface", str, "127.0.0.1", - "Web UI interface." + "web_host", str, "127.0.0.1", + "Web UI host." ) def running(self): if hasattr(ctx.options, "web_open_browser") and ctx.options.web_open_browser: - web_url = "http://{}:{}/".format(ctx.options.web_iface, ctx.options.web_port) + web_url = "http://{}:{}/".format(ctx.options.web_host, ctx.options.web_port) success = open_browser(web_url) if not success: ctx.log.info( |