diff options
author | Thomas Kriechbaumer <thomas@kriechbaumer.name> | 2015-08-16 20:02:18 +0200 |
---|---|---|
committer | Thomas Kriechbaumer <thomas@kriechbaumer.name> | 2015-08-18 22:17:00 +0200 |
commit | 9686a77dcb640ace74f923c1f0f7f7307f79edfe (patch) | |
tree | 59eb8c26f1e3cc074a6b61e6a134b4bd9f966628 /netlib | |
parent | 07a1356e2f155d5b9e3a5f97bf90515ed9f1011f (diff) | |
download | mitmproxy-9686a77dcb640ace74f923c1f0f7f7307f79edfe.tar.gz mitmproxy-9686a77dcb640ace74f923c1f0f7f7307f79edfe.tar.bz2 mitmproxy-9686a77dcb640ace74f923c1f0f7f7307f79edfe.zip |
http2: implement request target
Diffstat (limited to 'netlib')
-rw-r--r-- | netlib/http/cookies.py | 3 | ||||
-rw-r--r-- | netlib/http/http2/protocol.py | 39 |
2 files changed, 34 insertions, 8 deletions
diff --git a/netlib/http/cookies.py b/netlib/http/cookies.py index b77e3503..78b03a83 100644 --- a/netlib/http/cookies.py +++ b/netlib/http/cookies.py @@ -23,8 +23,7 @@ variants. Serialization follows RFC6265. http://tools.ietf.org/html/rfc2965 """ -# TODO -# - Disallow LHS-only Cookie values +# TODO: Disallow LHS-only Cookie values def _read_until(s, start, term): diff --git a/netlib/http/http2/protocol.py b/netlib/http/http2/protocol.py index c27b4e9e..eacbd2d8 100644 --- a/netlib/http/http2/protocol.py +++ b/netlib/http/http2/protocol.py @@ -80,13 +80,39 @@ class HTTP2Protocol(semantics.ProtocolMixin): timestamp_end = time.time() + authority = headers.get_first(':authority', '') + method = headers.get_first(':method', 'GET') + scheme = headers.get_first(':scheme', 'https') + path = headers.get_first(':path', '/') + host = None + port = None + + if path == '*' or path.startswith("/"): + form_in = "relative" + elif method == 'CONNECT': + form_in = "authority" + if ":" in authority: + host, port = authority.split(":", 1) + else: + host = authority + else: + form_in = "absolute" + # FIXME: verify if path or :host contains what we need + scheme, host, port, _ = utils.parse_url(path) + + if host is None: + host = 'localhost' + if port is None: + port = 80 if scheme == 'http' else 443 + port = int(port) + request = http.Request( - "relative", # TODO: use the correct value - headers.get_first(':method', 'GET'), - headers.get_first(':scheme', 'https'), - headers.get_first(':host', 'localhost'), - 443, # TODO: parse port number from host? - headers.get_first(':path', '/'), + form_in, + method, + scheme, + host, + port, + path, (2, 0), headers, body, @@ -324,6 +350,7 @@ class HTTP2Protocol(semantics.ProtocolMixin): return [frm.to_bytes() for frm in frms] def _receive_transmission(self, include_body=True): + # TODO: include_body is not respected body_expected = True stream_id = 0 |