Files

49 lines
1.3 KiB
Ruby

class ZipFile::RemoteIO < ZipKit::RemoteIO
def initialize(url, ssl_verify_peer: true)
super(url)
@ssl_verify_peer = ssl_verify_peer
end
protected
def request_range(range)
with_http do |http|
request = Net::HTTP::Get.new(@uri)
request.range = range
response = http.request(request)
case response.code
when "206", "200"
response.body
else
raise "Remote at #{@uri} replied with code #{response.code}"
end
end
end
def request_object_size
with_http do |http|
request = Net::HTTP::Get.new(@uri)
request.range = 0..0
response = http.request(request)
case response.code
when "206"
content_range_header_value = response["Content-Range"]
content_range_header_value.split("/").last.to_i
when "200"
response["Content-Length"].to_i
else
raise "Remote at #{@uri} replied with code #{response.code}"
end
end
end
private
def with_http
http = Net::HTTP.new(@uri.hostname, @uri.port)
http.use_ssl = @uri.scheme == "https"
http.verify_mode = OpenSSL::SSL::VERIFY_NONE unless @ssl_verify_peer
http.start { yield http }
end
end