Commit ab53ab0a authored by Berker Peksag's avatar Berker Peksag

Issue #13128: Print response headers for CONNECT requests when debuglevel > 0.

Patch by Demian Brecht.
parent 50457403
...@@ -776,6 +776,9 @@ class HTTPConnection: ...@@ -776,6 +776,9 @@ class HTTPConnection:
if line in (b'\r\n', b'\n', b''): if line in (b'\r\n', b'\n', b''):
break break
if self.debuglevel > 0:
print('header:', line.decode())
def connect(self): def connect(self):
"""Connect to the host and port specified in __init__.""" """Connect to the host and port specified in __init__."""
self.sock = self._create_connection( self.sock = self._create_connection(
......
...@@ -1269,17 +1269,18 @@ class TunnelTests(TestCase): ...@@ -1269,17 +1269,18 @@ class TunnelTests(TestCase):
'HTTP/1.1 200 OK\r\n' # Reply to HEAD 'HTTP/1.1 200 OK\r\n' # Reply to HEAD
'Content-Length: 42\r\n\r\n' '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.host = 'proxy.com'
self.conn = client.HTTPConnection(self.host) self.conn = client.HTTPConnection(self.host)
self.conn._create_connection = create_connection self.conn._create_connection = self._create_connection(response_text)
def tearDown(self): def tearDown(self):
self.conn.close() 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): def test_set_tunnel_host_port_headers(self):
tunnel_host = 'destination.com' tunnel_host = 'destination.com'
tunnel_port = 8888 tunnel_port = 8888
...@@ -1320,6 +1321,18 @@ class TunnelTests(TestCase): ...@@ -1320,6 +1321,18 @@ class TunnelTests(TestCase):
self.assertIn(b'CONNECT destination.com', self.conn.sock.data) self.assertIn(b'CONNECT destination.com', self.conn.sock.data)
self.assertIn(b'Host: 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 @support.reap_threads
......
...@@ -232,6 +232,9 @@ Core and Builtins ...@@ -232,6 +232,9 @@ Core and Builtins
Library 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 #15381: Optimized io.BytesIO to make less allocations and copyings.
- Issue #22818: Splitting on a pattern that could match an empty string now - Issue #22818: Splitting on a pattern that could match an empty string now
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment