From 10b5548eace342387afc97f5a809792dbd94b4b5 Mon Sep 17 00:00:00 2001 From: Markus Reiter Date: Sun, 13 Dec 2020 12:21:59 +0100 Subject: [PATCH] Fix `page_headers` method for multiple headers. --- Library/Homebrew/livecheck/strategy.rb | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/Library/Homebrew/livecheck/strategy.rb b/Library/Homebrew/livecheck/strategy.rb index 1fa154a96d..6a566ad16b 100644 --- a/Library/Homebrew/livecheck/strategy.rb +++ b/Library/Homebrew/livecheck/strategy.rb @@ -83,11 +83,27 @@ module Homebrew def self.page_headers(url) @headers ||= {} - @headers[url] ||= curl_output("--head", "--location", url).stdout - .split("\r\n\r\n", 2).first - .split("\r\n").drop(1) - .map { |header| header.split(/:\s*/, 2) } - .to_h.transform_keys(&:downcase) + + return @headers[url] if @headers.key?(url) + + stdout, _, status = curl_output( + "--head", "--request", "GET", "--silent", "--location", + "--connect-timeout", 5, "--retry-max-time", 15, "--max-time", 10, + url + ) + return {} unless status.success? + + headers = {} + + while stdout.match?(/\AHTTP.*\r$/) + h, stdout = stdout.split("\r\n\r\n", 2) + + headers = headers.merge(h.split("\r\n").drop(1) + .map { |header| header.split(/:\s*/, 2) } + .to_h.transform_keys(&:downcase)) + end + + @headers[url] = headers end def self.page_contents(url)