<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def _make_request(self, url, method="get", data=None, extra_headers=None):
 """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 """

        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