aboutsummaryrefslogtreecommitdiffstats
path: root/mitmproxy
diff options
context:
space:
mode:
Diffstat (limited to 'mitmproxy')
-rw-r--r--mitmproxy/net/http/http1/assemble.py11
-rw-r--r--mitmproxy/net/http/http1/read.py34
-rw-r--r--mitmproxy/tools/cmdline.py2
-rw-r--r--mitmproxy/tools/web/master.py4
-rw-r--r--mitmproxy/tools/web/webaddons.py6
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(