# File lib/vagrant_cloud/client.rb, line 26
    def request(method, path, params = {}, token = nil)
      headers = {}

      if token
        headers['Authorization'] = "Bearer #{token}"
      elsif @access_token
        headers['Authorization'] = "Bearer #{@access_token}"
      end

      headers['Accept'] = 'application/json'

      request_params = {
        method: method,
        url: @url_base + path,
        headers: headers,
        ssl_version: 'TLSv1'
      }

      if ['get', 'head', 'delete'].include?(method.downcase)
        headers[:params] = params
      else
        request_params[:payload] = params
      end

      begin
        result = RestClient::Request.execute(request_params)

        parse_json(result)
      rescue RestClient::ExceptionWithResponse => e
        raise ClientError.new(e.message, e.http_body, e.http_code)
      end
    end