diff --git a/scrapy/downloadermiddlewares/httpcompression.py b/scrapy/downloadermiddlewares/httpcompression.py index 6ca04a50e..13a432476 100644 --- a/scrapy/downloadermiddlewares/httpcompression.py +++ b/scrapy/downloadermiddlewares/httpcompression.py @@ -123,12 +123,14 @@ class HttpCompressionMiddleware: response.body, content_encoding, max_size ) except _DecompressionMaxSizeExceeded as e: - raise IgnoreRequest( + msg = ( f"Ignored response {response} because its body " f"({len(response.body)} B compressed, " f"{e.decompressed_size} B decompressed so far) exceeded " f"DOWNLOAD_MAXSIZE ({max_size} B) during decompression." - ) from e + ) + logger.warning(msg) + raise IgnoreRequest(msg) from e if len(response.body) < warn_size <= len(decoded_body): logger.warning( f"{response} body size after decompression " diff --git a/tests/test_downloadermiddleware_httpcompression.py b/tests/test_downloadermiddleware_httpcompression.py index 5c4085657..efc9caf53 100644 --- a/tests/test_downloadermiddleware_httpcompression.py +++ b/tests/test_downloadermiddleware_httpcompression.py @@ -538,9 +538,23 @@ class TestHttpCompression: mw.open_spider(spider) response = self._getresponse(f"bomb-{compression_id}") # 11_511_612 B - with pytest.raises(IgnoreRequest) as exc_info: + with ( + LogCapture( + "scrapy.downloadermiddlewares.httpcompression", + propagate=False, + level=WARNING, + ) as log, + pytest.raises(IgnoreRequest) as exc_info, + ): mw.process_response(response.request, response) assert exc_info.value.__cause__.decompressed_size < 1_100_000 + log.check( + ( + "scrapy.downloadermiddlewares.httpcompression", + "WARNING", + str(exc_info.value), + ), + ) def test_compression_bomb_setting_br(self): _skip_if_no_br()