code: def make_request(self, service_url, method='get', headers=None, data=None,
                       callback=None, errors=GRACEFUL, **params):
          
          error_modes = (STRICT, GRACEFUL, IGNORE)
          error_mode = errors or GRACEFUL
          if error_mode.lower() not in error_modes:
              raise ValueError(
                  'Possible values for errors argument are: %s' %
                  ', '.join(error_modes)
              )
  
          if callback is None:
              callback = self._default_resp_callback
  
          if 'apikey' not in service_url.lower():
              params.update({
                  'apiKey': self.api_key
              })
  
          request = getattr(requests, method.lower())
  
          log.debug('* Request URL: %s' % service_url)
          log.debug('* Request method: %s' % method)
          log.debug('* Request query params: %s' % params)
          log.debug('* Request headers: %s' % headers)
  
          r = request(service_url, headers=headers, data=data, params=params)
          try:
              r.raise_for_status()
              return callback(r)
          except Exception as e:
              return self._with_error_handling(r, e, error_mode,
                                               self.response_format)
docs: Reusable method for performing requests.
  
          :param service_url - URL to request
          :param method - request method, default is 'get'
          :param headers - request headers
          :param data - post data
          :param callback - callback to be applied to response,
                            default callback will parse response as json object.
          :param errors - specifies communication errors handling mode,
                          possible values are:
                           * strict (default) - throw an error as soon as one
                                                occurred
                           * graceful - ignore certain errors, e.g. EmptyResponse
                           * ignore - ignore all errors and return a result in
                                      any case.
                                      NOTE that it DOES NOT mean that
                                      no exceptions can be raised from
                                      this method, it mostly ignores
                                      communication related errors.
                           * None or empty string equals to default
          :param params - additional query parameters for request