docs: def _request(self, path, key, data, method, key_is_cik, extra_headers={}):
          """Generically shared HTTP request method.
  
          Args:
              path: The API endpoint to interact with.
              key: A string for the key used by the device for the API.  Either a CIK or token.
              data: A string for the pre-encoded data to be sent with this request.
              method: A string denoting the HTTP verb to use for the request (e.g. 'GET', 'POST')
              key_is_cik: Whether or not the device key used is a CIK or token.
              extra_headers: A dictionary of extra headers to include with the request.
  
          Returns:
              A ProvisionResponse containing the result of the HTTP request.
          """
          if method == 'GET':
              if len(data) > 0:
                  url = path + '?' + data
              else:
                  url = path
              body = None
          else:
              url = path
              body = data
  
          headers = {}
          if key_is_cik:
              headers['X-Exosite-CIK'] = key
          else:
              headers['X-Exosite-Token'] = key
          if method == 'POST':
              headers['Content-Type'] = 'application/x-www-form-urlencoded; charset=utf-8'
          headers['Accept'] = 'text/plain, text/csv, application/x-www-form-urlencoded'
          headers.update(extra_headers)
  
          body, response = self._onephttp.request(method,
                                                  url,
                                                  body,
                                                  headers)
  
          pr = ProvisionResponse(body, response)
          if self._raise_api_exceptions and not pr.isok:
              raise ProvisionException(pr)
          return pr