module Pod::HTTP
Handles HTTP
requests
Constants
- MAX_HTTP_REDIRECTS
- USER_AGENT
Public Class Methods
get_actual_url(url, user_agent = nil)
click to toggle source
Resolve potential redirects and return the final URL.
@return [string]
# File lib/cocoapods-core/http.rb, line 11 def self.get_actual_url(url, user_agent = nil) redirects = 0 loop do response = perform_head_request(url, user_agent) if [301, 302, 303, 307, 308].include? response.status_code location = response.headers['location'].first if location =~ %r{://} url = location else url = URI.join(url, location).to_s end redirects += 1 else break end break unless redirects < MAX_HTTP_REDIRECTS end url end
perform_head_request(url, user_agent)
click to toggle source
Does a HEAD request and in case of any errors a GET request
@return [REST::response]
# File lib/cocoapods-core/http.rb, line 62 def self.perform_head_request(url, user_agent) require 'rest' user_agent ||= USER_AGENT resp = ::REST.head(url, 'User-Agent' => user_agent) if resp.status_code >= 400 resp = ::REST.get(url, 'User-Agent' => user_agent, 'Range' => 'bytes=0-0') if resp.status_code >= 400 resp = ::REST.get(url, 'User-Agent' => user_agent) end end resp end
validate_url(url, user_agent = nil)
click to toggle source
Performs validation of a URL
@return [REST::response]
# File lib/cocoapods-core/http.rb, line 41 def self.validate_url(url, user_agent = nil) return nil unless url =~ /^#{URI.regexp}$/ begin url = get_actual_url(url, user_agent) resp = perform_head_request(url, user_agent) rescue SocketError, URI::InvalidURIError, REST::Error, REST::Error::Connection resp = nil end resp end