lib/onebox/helpers.rb in onebox-1.5.5 vs lib/onebox/helpers.rb in onebox-1.5.6

- old
+ new

@@ -19,8 +19,38 @@ def self.clean(html) html.gsub(/<[^>]+>/, ' ').gsub(/\n/, '') end + def self.fetch_response(location, limit = 5, domain = nil,headers=nil) + raise Net::HTTPError.new('HTTP redirect too deep', location) if limit == 0 + + uri = URI(location) + if !uri.host + uri = URI("#{domain}#{location}") + end + http = Net::HTTP.new(uri.host, uri.port) + http.open_timeout = Onebox.options.connect_timeout + http.read_timeout = Onebox.options.timeout + if uri.is_a?(URI::HTTPS) + http.use_ssl = true + http.verify_mode = OpenSSL::SSL::VERIFY_NONE + end + + response = http.request_get(uri.request_uri,headers) + + cookie = response.get_fields('set-cookie') + if (cookie) + header = {'cookie' => cookie.join("")} + end + header = nil unless header.is_a? Hash + + case response + when Net::HTTPSuccess then response + when Net::HTTPRedirection then fetch_response(response['location'], limit - 1, "#{uri.scheme}://#{uri.host}",header) + else + response.error! + end + end end end