code: def _make_request(self, url, method="get", data=None, extra_headers=None):
          
          attempts = 0
  
          while attempts < 1:
              # Authenticate first if not authenticated already
              if not self._is_authenticated:
                  self._authenticate()
              # Make the request and check for authentication errors
              # This allows us to catch session timeouts for long standing connections
              try:
                  return self._send_request(url, method, data, extra_headers)
              except HTTPError as e:
                  if e.response.status_code == 403:
                      logger.info("Authenticated session against NetMRI timed out. Retrying.")
                      self._is_authenticated = False
                      attempts += 1
                  else:
                      # re-raise other HTTP errors
                      raise
docs: Prepares the request, checks for authentication and retries in case of issues
  
          Args:
              url (str): URL of the request
              method (str): Any of "get", "post", "delete"
              data (any): Possible extra data to send with the request
              extra_headers (dict): Possible extra headers to send along in the request
          Returns:
              dict