class Chef::HTTP::HTTPRequest

def self.user_agent

def self.user_agent
  @user_agent ||= DEFAULT_UA
end

def self.user_agent=(ua)

def self.user_agent=(ua)
  @user_agent = ua
end

def build_headers(headers)

def build_headers(headers)
  @headers = headers.dup
  # No response compression unless we asked for it explicitly:
  @headers[HTTPRequest::ACCEPT_ENCODING] ||= "identity"
  @headers["X-Chef-Version"] = ::Chef::VERSION
  # Only include port in Host header when it is not the default port
  # for the url scheme (80;443) - Fixes CHEF-5355
  host_header = uri_safe_host.dup
  host_header << ":#{port}" unless URI_SCHEME_DEFAULT_PORT[@url.scheme] == port.to_i
  @headers["Host"] = host_header unless @headers.keys.any? { |k| k.downcase.to_s == HOST_LOWER }
  @headers
end

def call

Deprecated:
  • Call request on an HTTP client object instead.
def call
  hide_net_http_bug do
    http_client.request(http_request) do |response|
      yield response if block_given?
      response
    end
  end
end

def config

def config
  Chef::Config
end

def configure_http_request(request_body = nil)

def configure_http_request(request_body = nil)
  req_path = path.to_s.dup
  req_path << "?#{query}" if query
  @http_request = case method.to_s.downcase
                  when GET
                    Net::HTTP::Get.new(req_path, headers)
                  when POST
                    Net::HTTP::Post.new(req_path, headers)
                  when PUT
                    Net::HTTP::Put.new(req_path, headers)
                  when PATCH
                    Net::HTTP::Patch.new(req_path, headers)
                  when DELETE
                    Net::HTTP::Delete.new(req_path, headers)
                  when HEAD
                    Net::HTTP::Head.new(req_path, headers)
                  else
                    raise ArgumentError, "You must provide :GET, :PUT, :POST, :DELETE or :HEAD as the method"
                  end
  @http_request.body = request_body if request_body && @http_request.request_body_permitted?
  # Optionally handle HTTP Basic Authentication
  if url.user
    user = CGI.unescape(url.user)
    password = CGI.unescape(url.password) if url.password
    @http_request.basic_auth(user, password)
  end
  # Overwrite default UA
  @http_request[USER_AGENT] = self.class.user_agent
end

def hide_net_http_bug

def hide_net_http_bug
  yield
rescue NoMethodError => e
  # http://redmine.ruby-lang.org/issues/show/2708
  # http://redmine.ruby-lang.org/issues/show/2758
  if /#{Regexp.escape(%q{undefined method `closed?' for nil:NilClass})}/.match?(e.to_s)
    Chef::Log.trace("Rescued error in http connect, re-raising as Errno::ECONNREFUSED to hide bug in net/http")
    Chef::Log.trace("#{e.class.name}: #{e}")
    Chef::Log.trace(e.backtrace.join("\n"))
    raise Errno::ECONNREFUSED, "Connection refused attempting to contact #{url.scheme}://#{host}:#{port}"
  else
    raise
  end
end

def host

def host
  @url.hostname
end

def http_client

Deprecated:
  • Call request on an HTTP client object instead.
def http_client
  @http_client ||= BasicClient.new(url).http_client
end

def initialize(method, url, req_body, base_headers = {})

def initialize(method, url, req_body, base_headers = {})
  @method, @url = method, url
  @request_body = nil
  build_headers(base_headers)
  configure_http_request(req_body)
end

def path

def path
  @url.path.empty? ? SLASH : @url.path
end

def port

def port
  @url.port
end

def query

def query
  @url.query
end

def uri_safe_host

def uri_safe_host
  @url.host
end