@@ -221,8 +221,8 @@ def _read_headers(fp):
221221break
222222return headers
223223
224- def parse_headers ( fp ,_class = HTTPMessage ):
225- """Parses only RFC2822 headers froma file pointer .
224+ def _parse_header_lines ( header_lines ,_class = HTTPMessage ):
225+ """Parses only RFC2822 headers fromheader lines .
226226
227227 email Parser wants to see strings rather than bytes.
228228 But a TextIOWrapper around self.rfile would buffer too many bytes
@@ -231,10 +231,13 @@ def parse_headers(fp, _class=HTTPMessage):
231231 to parse.
232232
233233 """
234- headers = _read_headers (fp )
235- hstring = b'' .join (headers ).decode ('iso-8859-1' )
234+ hstring = b'' .join (header_lines ).decode ('iso-8859-1' )
236235return email .parser .Parser (_class = _class ).parsestr (hstring )
237236
237+ def parse_headers (fp ,_class = HTTPMessage ):
238+ headers = _read_headers (fp )
239+ return _parse_header_lines (headers ,_class )
240+
238241
239242class HTTPResponse (io .BufferedIOBase ):
240243
@@ -858,7 +861,7 @@ def __init__(self, host, port=None, timeout=socket._GLOBAL_DEFAULT_TIMEOUT,
858861self ._tunnel_host = None
859862self ._tunnel_port = None
860863self ._tunnel_headers = {}
861- self ._proxy_response_headers = None
864+ self ._raw_proxy_headers = None
862865
863866 (self .host ,self .port )= self ._get_hostport (host ,port )
864867
@@ -945,11 +948,11 @@ def _tunnel(self):
945948try :
946949 (version ,code ,message )= response ._read_status ()
947950
948- self ._proxy_response_headers = parse_headers (response .fp )
951+ self ._raw_proxy_headers = _read_headers (response .fp )
949952
950953if self .debuglevel > 0 :
951- for hdr , val in self ._proxy_response_headers . items () :
952- print (" header:" , hdr + ":" , val )
954+ for header in self ._raw_proxy_headers :
955+ print (' header:' , header . decode () )
953956
954957if code != http .HTTPStatus .OK :
955958self .close ()
@@ -958,6 +961,13 @@ def _tunnel(self):
958961finally :
959962response .close ()
960963
964+ def get_proxy_response_headers (self ):
965+ return (
966+ _parse_header_lines (self ._raw_proxy_headers )
967+ if self ._raw_proxy_headers is not None
968+ else None
969+ )
970+
961971def connect (self ):
962972"""Connect to the host and port specified in __init__."""
963973sys .audit ("http.client.connect" ,self ,self .host ,self .port )