From ab53ab0a843757d2a40bde1e00a80ea91bcf8402 Mon Sep 17 00:00:00 2001 From: Berker Peksag Date: Tue, 3 Feb 2015 12:22:11 +0200 Subject: Issue #13128: Print response headers for CONNECT requests when debuglevel > 0. Patch by Demian Brecht. --- Lib/http/client.py | 3 +++ Lib/test/test_httplib.py | 23 ++++++++++++++++++----- Misc/NEWS | 3 +++ 3 files changed, 24 insertions(+), 5 deletions(-) diff --git a/Lib/http/client.py b/Lib/http/client.py index 392715b..a77e501 100644 --- a/Lib/http/client.py +++ b/Lib/http/client.py @@ -776,6 +776,9 @@ class HTTPConnection: if line in (b'\r\n', b'\n', b''): break + if self.debuglevel > 0: + print('header:', line.decode()) + def connect(self): """Connect to the host and port specified in __init__.""" self.sock = self._create_connection( diff --git a/Lib/test/test_httplib.py b/Lib/test/test_httplib.py index 31d3184..40ef250 100644 --- a/Lib/test/test_httplib.py +++ b/Lib/test/test_httplib.py @@ -1269,17 +1269,18 @@ class TunnelTests(TestCase): 'HTTP/1.1 200 OK\r\n' # Reply to HEAD 'Content-Length: 42\r\n\r\n' ) - - def create_connection(address, timeout=None, source_address=None): - return FakeSocket(response_text, host=address[0], port=address[1]) - self.host = 'proxy.com' self.conn = client.HTTPConnection(self.host) - self.conn._create_connection = create_connection + self.conn._create_connection = self._create_connection(response_text) def tearDown(self): self.conn.close() + def _create_connection(self, response_text): + def create_connection(address, timeout=None, source_address=None): + return FakeSocket(response_text, host=address[0], port=address[1]) + return create_connection + def test_set_tunnel_host_port_headers(self): tunnel_host = 'destination.com' tunnel_port = 8888 @@ -1320,6 +1321,18 @@ class TunnelTests(TestCase): self.assertIn(b'CONNECT destination.com', self.conn.sock.data) self.assertIn(b'Host: destination.com', self.conn.sock.data) + def test_tunnel_debuglog(self): + expected_header = 'X-Dummy: 1' + response_text = 'HTTP/1.0 200 OK\r\n{}\r\n\r\n'.format(expected_header) + + self.conn.set_debuglevel(1) + self.conn._create_connection = self._create_connection(response_text) + self.conn.set_tunnel('destination.com') + + with support.captured_stdout() as output: + self.conn.request('PUT', '/', '') + lines = output.getvalue().splitlines() + self.assertIn('header: {}'.format(expected_header), lines) @support.reap_threads diff --git a/Misc/NEWS b/Misc/NEWS index 4952455..bbe7573 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -232,6 +232,9 @@ Core and Builtins Library ------- +- Issue #13128: Print response headers for CONNECT requests when debuglevel + > 0. Patch by Demian Brecht. + - Issue #15381: Optimized io.BytesIO to make less allocations and copyings. - Issue #22818: Splitting on a pattern that could match an empty string now -- cgit v0.12