mirror of
https://github.com/Grasscutters/mitmproxy.git
synced 2024-11-30 03:14:22 +00:00
Merge pull request #1325 from Kriechi/dufferzafar-py3-h2
HTTP/2: Python 3-compatibility
This commit is contained in:
commit
7baeac4d67
@ -197,7 +197,7 @@ class Http2Layer(base.Layer):
|
|||||||
self.client_conn.h2.push_stream(parent_eid, event.pushed_stream_id, event.headers)
|
self.client_conn.h2.push_stream(parent_eid, event.pushed_stream_id, event.headers)
|
||||||
self.client_conn.send(self.client_conn.h2.data_to_send())
|
self.client_conn.send(self.client_conn.h2.data_to_send())
|
||||||
|
|
||||||
headers = netlib.http.Headers([[str(k), str(v)] for k, v in event.headers])
|
headers = netlib.http.Headers([[k, v] for k, v in event.headers])
|
||||||
self.streams[event.pushed_stream_id] = Http2SingleStreamLayer(self, event.pushed_stream_id, headers)
|
self.streams[event.pushed_stream_id] = Http2SingleStreamLayer(self, event.pushed_stream_id, headers)
|
||||||
self.streams[event.pushed_stream_id].timestamp_start = time.time()
|
self.streams[event.pushed_stream_id].timestamp_start = time.time()
|
||||||
self.streams[event.pushed_stream_id].pushed = True
|
self.streams[event.pushed_stream_id].pushed = True
|
||||||
@ -434,7 +434,7 @@ class Http2SingleStreamLayer(http._HttpTransmissionLayer, basethread.BaseThread)
|
|||||||
self.server_conn.h2.safe_send_body(
|
self.server_conn.h2.safe_send_body(
|
||||||
self.is_zombie,
|
self.is_zombie,
|
||||||
self.server_stream_id,
|
self.server_stream_id,
|
||||||
message.body
|
[message.body]
|
||||||
)
|
)
|
||||||
|
|
||||||
if self.zombie: # pragma: no cover
|
if self.zombie: # pragma: no cover
|
||||||
@ -453,7 +453,7 @@ class Http2SingleStreamLayer(http._HttpTransmissionLayer, basethread.BaseThread)
|
|||||||
return models.HTTPResponse(
|
return models.HTTPResponse(
|
||||||
http_version=b"HTTP/2.0",
|
http_version=b"HTTP/2.0",
|
||||||
status_code=status_code,
|
status_code=status_code,
|
||||||
reason='',
|
reason=b'',
|
||||||
headers=headers,
|
headers=headers,
|
||||||
content=None,
|
content=None,
|
||||||
timestamp_start=self.timestamp_start,
|
timestamp_start=self.timestamp_start,
|
||||||
|
@ -126,7 +126,7 @@ class _Http2TestBase(object):
|
|||||||
client.wfile.flush()
|
client.wfile.flush()
|
||||||
|
|
||||||
# read CONNECT response
|
# read CONNECT response
|
||||||
while client.rfile.readline() != "\r\n":
|
while client.rfile.readline() != b"\r\n":
|
||||||
pass
|
pass
|
||||||
|
|
||||||
client.convert_to_ssl(alpn_protos=[b'h2'])
|
client.convert_to_ssl(alpn_protos=[b'h2'])
|
||||||
@ -169,8 +169,8 @@ class TestSimple(_Http2TestBase, _Http2ServerBase):
|
|||||||
if isinstance(event, h2.events.ConnectionTerminated):
|
if isinstance(event, h2.events.ConnectionTerminated):
|
||||||
return False
|
return False
|
||||||
elif isinstance(event, h2.events.RequestReceived):
|
elif isinstance(event, h2.events.RequestReceived):
|
||||||
assert ('client-foo', 'client-bar-1') in event.headers
|
assert (b'client-foo', b'client-bar-1') in event.headers
|
||||||
assert ('client-foo', 'client-bar-2') in event.headers
|
assert (b'client-foo', b'client-bar-2') in event.headers
|
||||||
|
|
||||||
import warnings
|
import warnings
|
||||||
with warnings.catch_warnings():
|
with warnings.catch_warnings():
|
||||||
@ -203,7 +203,7 @@ class TestSimple(_Http2TestBase, _Http2ServerBase):
|
|||||||
(':path', '/'),
|
(':path', '/'),
|
||||||
('ClIeNt-FoO', 'client-bar-1'),
|
('ClIeNt-FoO', 'client-bar-1'),
|
||||||
('ClIeNt-FoO', 'client-bar-2'),
|
('ClIeNt-FoO', 'client-bar-2'),
|
||||||
], body='my request body echoed back to me')
|
], body=b'my request body echoed back to me')
|
||||||
|
|
||||||
done = False
|
done = False
|
||||||
while not done:
|
while not done:
|
||||||
@ -275,7 +275,7 @@ class TestWithBodies(_Http2TestBase, _Http2ServerBase):
|
|||||||
(':scheme', 'https'),
|
(':scheme', 'https'),
|
||||||
(':path', '/'),
|
(':path', '/'),
|
||||||
],
|
],
|
||||||
body='foobar with request body',
|
body=b'foobar with request body',
|
||||||
)
|
)
|
||||||
|
|
||||||
done = False
|
done = False
|
||||||
@ -538,7 +538,7 @@ class TestMaxConcurrentStreams(_Http2TestBase, _Http2ServerBase):
|
|||||||
(':status', '200'),
|
(':status', '200'),
|
||||||
('X-Stream-ID', str(event.stream_id)),
|
('X-Stream-ID', str(event.stream_id)),
|
||||||
])
|
])
|
||||||
h2_conn.send_data(event.stream_id, b'Stream-ID {}'.format(event.stream_id))
|
h2_conn.send_data(event.stream_id, 'Stream-ID {}'.format(event.stream_id).encode())
|
||||||
h2_conn.end_stream(event.stream_id)
|
h2_conn.end_stream(event.stream_id)
|
||||||
wfile.write(h2_conn.data_to_send())
|
wfile.write(h2_conn.data_to_send())
|
||||||
wfile.flush()
|
wfile.flush()
|
||||||
@ -579,7 +579,7 @@ class TestMaxConcurrentStreams(_Http2TestBase, _Http2ServerBase):
|
|||||||
assert len(self.master.state.flows) == len(new_streams)
|
assert len(self.master.state.flows) == len(new_streams)
|
||||||
for flow in self.master.state.flows:
|
for flow in self.master.state.flows:
|
||||||
assert flow.response.status_code == 200
|
assert flow.response.status_code == 200
|
||||||
assert "Stream-ID" in flow.response.body
|
assert b"Stream-ID " in flow.response.body
|
||||||
|
|
||||||
|
|
||||||
@requires_alpn
|
@requires_alpn
|
||||||
@ -598,7 +598,7 @@ class TestConnectionTerminated(_Http2TestBase, _Http2ServerBase):
|
|||||||
@classmethod
|
@classmethod
|
||||||
def handle_server_event(self, event, h2_conn, rfile, wfile):
|
def handle_server_event(self, event, h2_conn, rfile, wfile):
|
||||||
if isinstance(event, h2.events.RequestReceived):
|
if isinstance(event, h2.events.RequestReceived):
|
||||||
h2_conn.close_connection(error_code=5, last_stream_id=42, additional_data='foobar')
|
h2_conn.close_connection(error_code=5, last_stream_id=42, additional_data=b'foobar')
|
||||||
wfile.write(h2_conn.data_to_send())
|
wfile.write(h2_conn.data_to_send())
|
||||||
wfile.flush()
|
wfile.flush()
|
||||||
return True
|
return True
|
||||||
@ -630,4 +630,4 @@ class TestConnectionTerminated(_Http2TestBase, _Http2ServerBase):
|
|||||||
assert connection_terminated_event is not None
|
assert connection_terminated_event is not None
|
||||||
assert connection_terminated_event.error_code == 5
|
assert connection_terminated_event.error_code == 5
|
||||||
assert connection_terminated_event.last_stream_id == 42
|
assert connection_terminated_event.last_stream_id == 42
|
||||||
assert connection_terminated_event.additional_data == 'foobar'
|
assert connection_terminated_event.additional_data == b'foobar'
|
||||||
|
2
tox.ini
2
tox.ini
@ -16,7 +16,7 @@ commands =
|
|||||||
|
|
||||||
[testenv:py35]
|
[testenv:py35]
|
||||||
setenv =
|
setenv =
|
||||||
TESTS = test/netlib test/pathod/ test/mitmproxy/script test/mitmproxy/test_contentview.py test/mitmproxy/test_custom_contentview.py test/mitmproxy/test_app.py test/mitmproxy/test_controller.py test/mitmproxy/test_fuzzing.py test/mitmproxy/test_script.py test/mitmproxy/test_web_app.py test/mitmproxy/test_utils.py test/mitmproxy/test_stateobject.py test/mitmproxy/test_cmdline.py test/mitmproxy/test_contrib_tnetstring.py test/mitmproxy/test_proxy.py test/mitmproxy/test_protocol_http1.py test/mitmproxy/test_platform_pf.py test/mitmproxy/test_server.py test/mitmproxy/test_filt.py test/mitmproxy/test_flow_export.py test/mitmproxy/test_web_master.py test/mitmproxy/test_flow_format_compat.py test/mitmproxy/test_examples.py
|
TESTS = test/netlib test/pathod/ test/mitmproxy/script test/mitmproxy/test_contentview.py test/mitmproxy/test_custom_contentview.py test/mitmproxy/test_app.py test/mitmproxy/test_controller.py test/mitmproxy/test_fuzzing.py test/mitmproxy/test_script.py test/mitmproxy/test_web_app.py test/mitmproxy/test_utils.py test/mitmproxy/test_stateobject.py test/mitmproxy/test_cmdline.py test/mitmproxy/test_contrib_tnetstring.py test/mitmproxy/test_proxy.py test/mitmproxy/test_protocol_http1.py test/mitmproxy/test_platform_pf.py test/mitmproxy/test_server.py test/mitmproxy/test_filt.py test/mitmproxy/test_flow_export.py test/mitmproxy/test_web_master.py test/mitmproxy/test_flow_format_compat.py test/mitmproxy/test_examples.py test/mitmproxy/test_protocol_http2.py
|
||||||
HOME = {envtmpdir}
|
HOME = {envtmpdir}
|
||||||
|
|
||||||
[testenv:docs]
|
[testenv:docs]
|
||||||
|
Loading…
Reference in New Issue
Block a user