aboutsummaryrefslogtreecommitdiffstats
path: root/mitmproxy
diff options
context:
space:
mode:
authorMaximilian Hils <git@maximilianhils.com>2020-04-04 15:00:51 +0200
committerMaximilian Hils <git@maximilianhils.com>2020-04-04 15:08:12 +0200
commit9897ca7227d756453189802aa2bda1d4ba129875 (patch)
tree046537a9d90b080d23df5ddca46ebe9b647e1ebc /mitmproxy
parent6acabbb4f5977427dd08adb0d32b06c0007315d2 (diff)
downloadmitmproxy-9897ca7227d756453189802aa2bda1d4ba129875.tar.gz
mitmproxy-9897ca7227d756453189802aa2bda1d4ba129875.tar.bz2
mitmproxy-9897ca7227d756453189802aa2bda1d4ba129875.zip
sync sans-io adjustments
Diffstat (limited to 'mitmproxy')
-rw-r--r--mitmproxy/net/http/http1/read.py30
1 files changed, 16 insertions, 14 deletions
diff --git a/mitmproxy/net/http/http1/read.py b/mitmproxy/net/http/http1/read.py
index 294e8358..fbf5da2b 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():
@@ -220,7 +222,7 @@ def expected_http_body_size(request, response=None):
return size
except ValueError:
raise exceptions.HttpSyntaxException("Unparseable Content Length")
- if is_request:
+ if not response:
return 0
return -1