code: async def request(self, method, url, params=None, headers=None,
                        data=None, json=None, token_refresh_attempts=2,
                        **kwargs):
          if all([data, json]):
              msg = ('"data" and "json" request parameters can not be used '
                     'at the same time')
              logging.warn(msg)
              raise exceptions.GCPHTTPError(msg)
          req_headers = headers or {}
          req_headers.update(_utils.DEFAULT_REQUEST_HEADERS)
          req_kwargs = {
                  'params': params,
                  'headers': req_headers,
              }
          if data:
              req_kwargs['data'] = data
          if json:
              req_kwargs['json'] = json
          if token_refresh_attempts:
              if not await self.valid_token_set():
                  await self._auth_client.refresh_token()
                  token_refresh_attempts -= 1
          req_headers.update(
              {'Authorization': f'Bearer {self._auth_client.token}'}
          )
          request_id = kwargs.get('request_id', uuid.uuid4())
          logging.debug(_utils.REQ_LOG_FMT.format(
              request_id=request_id,
              method=method.upper(),
              url=url,
              kwargs=req_kwargs))
          try:
              async with self._session.request(method, url, **req_kwargs) as resp:
                  log_kw = {
                      'request_id': request_id,
                      'method': method.upper(),
                      'url': resp.url,
                      'status': resp.status,
                      'reason': resp.reason
                  }
                  logging.debug(_utils.RESP_LOG_FMT.format(**log_kw))
                  if resp.status in REFRESH_STATUS_CODES:
                      logging.warning(
                          f'[{request_id}] HTTP Status Code {resp.status}'
                          f' returned requesting {resp.url}: {resp.reason}')
                      if token_refresh_attempts:
                          logging.info(
                              f'[{request_id}] Attempting request to {resp.url} '
                              'again.')
                          return await self.request(
                              method, url,
                              token_refresh_attempts=token_refresh_attempts,
                              request_id=request_id,
                              **req_kwargs)
                      logging.warning(
                          f'[{request_id}] Max attempts refreshing auth token '
                          f'exhausted while requesting {resp.url}')
                  resp.raise_for_status()
                  return await resp.text()
          except aiohttp.ClientResponseError as e:
              msg = f'[{request_id}] HTTP error response from {resp.url}: {e}'
              logging.error(msg, exc_info=e)
              raise exceptions.GCPHTTPResponseError(msg, resp.status)
          except exceptions.GCPHTTPResponseError as e:
              raise e
          except Exception as e:
              msg = f'[{request_id}] Request call failed: {e}'
              logging.error(msg, exc_info=e)
              raise exceptions.GCPHTTPError(msg)