code: def _submit_request(self, url, params=None, data=None, headers=None,
                          method="GET"):
          
          if headers is None:
              headers = {}
  
          if self._auth_header is not None:
              headers['Authorization'] = self._auth_header
  
          try:
              if method == 'POST':
                  result = requests.post(
                      url, params=params, data=data, headers=headers)
              elif method == 'GET':
                  result = requests.get(
                      url, params=params, data=data, headers=headers)
              result.raise_for_status()
              return (result.status_code, result.json())
          except requests.exceptions.HTTPError as e:
              return (e.response.status_code, e.response.reason)
          except RemoteDisconnected as e:
              raise CliException(e)
          except (requests.exceptions.MissingSchema,
                  requests.exceptions.InvalidURL) as e:
              raise CliException(e)
          except requests.exceptions.ConnectionError as e:
              raise CliException(
                  ('Unable to connect to "{}": '
                   'make sure URL is correct').format(self._base_url))
docs: Submits the given request, and handles the errors appropriately.
  
          Args:
              url (str): the request to send.
              params (dict): params to be passed along to get/post
              data (bytes): the data to include in the request.
              headers (dict): the headers to include in the request.
              method (str): the method to use for the request, "POST" or "GET".
  
          Returns:
              tuple of (int, str): The response status code and the json parsed
                  body, or the error message.
  
          Raises:
              `CliException`: If any issues occur with the URL.