@@ -414,19 +414,25 @@ def _perform_urllib_http_request(
414414 return resp
415415
416416 except HTTPError as e :
417- resp = {"status" : e .code , "headers" : e .headers }
417+ # As adding new values to HTTPError#headers can be ignored, building a new dict object here
418+ response_headers = dict (e .headers .items ())
419+ resp = {"status" : e .code , "headers" : response_headers }
418420 if e .code == 429 :
419421 # for compatibility with aiohttp
420422 if (
421- "retry-after" not in resp [ "headers" ]
422- and "Retry-After" in resp [ "headers" ]
423+ "retry-after" not in response_headers
424+ and "Retry-After" in response_headers
423425 ):
424- resp ["headers" ]["retry-after" ] = resp ["headers" ]["Retry-After" ]
426+ response_headers ["retry-after" ] = response_headers [
427+ "Retry-After"
428+ ]
425429 if (
426- "Retry-After" not in resp [ "headers" ]
427- and "retry-after" in resp [ "headers" ]
430+ "Retry-After" not in response_headers
431+ and "retry-after" in response_headers
428432 ):
429- resp ["headers" ]["Retry-After" ] = resp ["headers" ]["retry-after" ]
433+ response_headers ["Retry-After" ] = response_headers [
434+ "retry-after"
435+ ]
430436
431437 # read the response body here
432438 charset = e .headers .get_content_charset () or "utf-8"
@@ -437,7 +443,7 @@ def _perform_urllib_http_request(
437443 retry_request = RetryHttpRequest .from_urllib_http_request (req )
438444 retry_response = RetryHttpResponse (
439445 status_code = e .code ,
440- headers = {k : [v ] for k , v in e . headers .items ()},
446+ headers = {k : [v ] for k , v in response_headers .items ()},
441447 data = response_body .encode ("utf-8" )
442448 if response_body is not None
443449 else None ,
0 commit comments