code: def make_request(method, url, params):
      
      empty = []
  
      # TODO
      # del params[key]
      # without list
      for key, value in six.iteritems(params):
          if value is None:
              empty.append(key)
      for key in empty:
          del params[key]
  
      # allow caller to disable automatic following of redirects
      allow_redirects = params.get('allow_redirects', True)
  
      kwargs = {
          'allow_redirects': allow_redirects,
          'headers': {
              'User-Agent': soundcloud.USER_AGENT
          }
      }
      # options, not params
      if 'verify_ssl' in params:
          if params['verify_ssl'] is False:
              kwargs['verify'] = params['verify_ssl']
          del params['verify_ssl']
      if 'proxies' in params:
          kwargs['proxies'] = params['proxies']
          del params['proxies']
      if 'allow_redirects' in params:
          del params['allow_redirects']
  
      params = hashconversions.to_params(params)
      files = namespaced_query_string(extract_files_from_dict(params))
      data = namespaced_query_string(remove_files_from_dict(params))
  
      request_func = getattr(requests, method, None)
      if request_func is None:
          raise TypeError('Unknown method: %s' % (method,))
  
      if method == 'get':
          kwargs['headers']['Accept'] = 'application/json'
          qs = urlencode(data)
          if '?' in url:
              url_qs = '%s&%s' % (url, qs)
          else:
              url_qs = '%s?%s' % (url, qs)
          result = request_func(url_qs, **kwargs)
      else:
          kwargs['data'] = data
          if files:
              kwargs['files'] = files
          result = request_func(url, **kwargs)
  
      # if redirects are disabled, don't raise for 301 / 302
      if result.status_code in (301, 302):
          if allow_redirects:
              result.raise_for_status()
      else:
          result.raise_for_status()
      return result
docs: Make an HTTP request, formatting params as required.