diff --git a/src/updates.rb b/src/updates.rb index 2fd5be3..0492638 100644 --- a/src/updates.rb +++ b/src/updates.rb @@ -32,14 +32,21 @@ class UpdateManager def self.fetch MethodExecutor.record('debug', 'updates', "Fetching version list from #{VERSION_LIST_URL}") uri = URI(VERSION_LIST_URL) - response = Net::HTTP.get_response(uri) - case response.code.to_i - when 200 - MethodExecutor.record('debug', 'updates', 'Version list fetched successfully.') - response.body - else - raise "Unexpected HTTP response code: #{response.code}" + 5.times do # 跟随重定向(Gitee raw URL → raw.giteeusercontent.com) + response = Net::HTTP.get_response(uri) + case response.code.to_i + when 200 + MethodExecutor.record('debug', 'updates', 'Version list fetched successfully.') + return response.body + when 301, 302, 307, 308 + uri = URI(response['location']) + MethodExecutor.record('debug', 'updates', "Following redirect to #{uri}") + next + else + raise "Unexpected HTTP response code: #{response.code}" + end end + raise 'Too many redirects' rescue StandardError => e MethodExecutor.record('error', 'updates', "Failed to fetch version list: #{e}") nil