diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/downloader/Response.java b/extractor/src/main/java/org/schabi/newpipe/extractor/downloader/Response.java index ac792dc75..7bc43bb2c 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/downloader/Response.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/downloader/Response.java @@ -5,6 +5,7 @@ import javax.annotation.Nullable; import java.util.Collections; import java.util.List; import java.util.Map; +import java.util.TreeMap; /** * A Data class used to hold the results from requests made by the Downloader implementation. @@ -14,17 +15,18 @@ public class Response { private final String responseMessage; private final Map> responseHeaders; private final String responseBody; - private final String latestUrl; public Response(final int responseCode, final String responseMessage, - @Nullable final Map> responseHeaders, + @Nonnull final Map> responseHeaders, @Nullable final String responseBody, @Nullable final String latestUrl) { this.responseCode = responseCode; this.responseMessage = responseMessage; - this.responseHeaders = responseHeaders == null ? Collections.emptyMap() : responseHeaders; + + this.responseHeaders = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); + this.responseHeaders.putAll(responseHeaders); this.responseBody = responseBody == null ? "" : responseBody; this.latestUrl = latestUrl; @@ -71,13 +73,8 @@ public class Response { */ @Nullable public String getHeader(final String name) { - for (final Map.Entry> headerEntry : responseHeaders.entrySet()) { - final String key = headerEntry.getKey(); - if (key != null && key.equalsIgnoreCase(name) && !headerEntry.getValue().isEmpty()) { - return headerEntry.getValue().get(0); - } - } - - return null; + // Header lookup is case-insensitive + final var values = responseHeaders.getOrDefault(name, Collections.emptyList()); + return values.isEmpty() ? null : values.get(0); } }