diff --git a/feedparser/api.py b/feedparser/api.py index 1c9cf15d..a9915194 100644 --- a/feedparser/api.py +++ b/feedparser/api.py @@ -221,7 +221,10 @@ def parse( file.seek(initial_file_offset) # overwrite existing headers using response_headers - result["headers"].update(response_headers or {}) + # Lowercase the HTTP header keys for comparisons per RFC 2616. + response_headers = response_headers or {} + extra_headers = {k.lower(): v for k, v in response_headers.items()} + result["headers"].update(extra_headers) try: _parse_file_inplace( diff --git a/tests/test_parse_parameters.py b/tests/test_parse_parameters.py index 76c7d204..492dd273 100644 --- a/tests/test_parse_parameters.py +++ b/tests/test_parse_parameters.py @@ -34,6 +34,16 @@ def test_sanitize_html_off(): assert d.entries[0].content[0].value == '' +def test_response_headers_case_insensitive(): + d = feedparser.parse( + io.BytesIO(feed_xml), + response_headers={"CoNtEnT-LoCaTiOn": "http://example.com/feed"}, + ) + assert d.entries[1].content[0].value == ( + 'boo' + ) + + def test_resolve_relative_uris_default(): d = feedparser.parse( io.BytesIO(feed_xml),