Module: DIDKit::Requests

Included in:
DID, Resolver
Defined in:
lib/didkit/requests.rb

Instance Method Summary collapse

Instance Method Details

#get_response(url, options = {}) ⇒ Object



2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/didkit/requests.rb', line 2

def get_response(url, options = {})
  url = URI(url) unless url.is_a?(URI)
  request_options = { use_ssl: true }

  if timeout = options[:timeout]
    request_options[:open_timeout] = timeout
    request_options[:read_timeout] = timeout
  end

  redirects = 0
  max_redirects = options[:max_redirects] || 0

  loop do
    response = Net::HTTP.start(url.host, url.port, request_options) do |http|
      request = Net::HTTP::Get.new(url)
      http.request(request)
    end

    if response.is_a?(Net::HTTPRedirection) && redirects < max_redirects && (location = response['Location'])
      url = URI(location.include?('://') ? location : (url.origin + location))
      redirects += 1
    else
      return response
    end
  end
end