def post(self, path, data=None, json=None, headers=None, **kwargs):
        """
        Sends a POST request to host/path.

        :param path: String, resource path on server
        :param data: Dictionary, bytes or file-like object to send in the body of the request
        :param json: JSON formatted data to send in the body of the request
        :param headers: Dictionary of HTTP headers to be sent with the request,
        overwrites default headers if there is overlap
        :param kwargs: Other arguments used in the requests.request call
        valid parameters in kwargs are the optional parameters of Requests.Request
        http://docs.python-requests.org/en/master/api/
        :return: requests.Response
        :raises: RequestException
        """

        if headers is not None:
            merger = jsonmerge.Merger(SCHEMA)
            kwargs["headers"] = merger.merge(self.defaultHeaders, headers)
        else:
            kwargs["headers"] = self.defaultHeaders

        url = combine_urls(self.host, path)

        if self.cert is not None:
            kwargs["cert"] = self.cert
        self.logger.debug("Trying to send HTTP POST to {}".format(url))
        try:
            resp = requests.post(url, data, json, **kwargs)
            self._log_response(resp)
        except requests.RequestException as es:
            self._log_exception(es)
            raise

        return resp