diff -r 4d00d0109147 Lib/http/client.py --- a/Lib/http/client.py Wed Jan 07 00:37:01 2015 +1000 +++ b/Lib/http/client.py Tue Jan 06 22:20:48 2015 -0800 @@ -774,6 +774,7 @@ self.close() raise OSError("Tunnel connection failed: %d %s" % (code, message.strip())) + while True: line = response.fp.readline(_MAXLINE + 1) if len(line) > _MAXLINE: @@ -784,6 +785,9 @@ 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((self.host,self.port), diff -r 4d00d0109147 Lib/test/test_httplib.py --- a/Lib/test/test_httplib.py Wed Jan 07 00:37:01 2015 +1000 +++ b/Lib/test/test_httplib.py Tue Jan 06 22:20:48 2015 -0800 @@ -1271,6 +1271,7 @@ header = self.resp.getheader('No-Such-Header',default=42) self.assertEqual(header, 42) + class TunnelTests(TestCase): def test_connect(self): @@ -1281,8 +1282,8 @@ ) def create_connection(address, timeout=None, source_address=None): - return FakeSocket(response_text, host=address[0], - port=address[1]) + return FakeSocket( + response_text, host=address[0], port=address[1]) conn = client.HTTPConnection('proxy.com') conn._create_connection = create_connection @@ -1314,6 +1315,27 @@ self.assertTrue(b'CONNECT destination.com' in conn.sock.data) self.assertTrue(b'Host: destination.com' in 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) + + def create_connection(address, timeout=None, source_address=None): + return FakeSocket( + response_text, host=address[0], port=address[1]) + + conn = client.HTTPConnection('proxy.com') + conn._create_connection = create_connection + conn.set_debuglevel(1) + + conn.set_tunnel('destination.com') + + with support.captured_stdout() as output: + conn.request('PUT', '/', '') + + lines = output.getvalue().splitlines() + self.assertIn('header: {}'.format(expected_header), lines) + + @support.reap_threads def test_main(verbose=None): support.run_unittest(HeaderTests, OfflineTest, BasicTest, TimeoutTest,