'Invoke the API on the server.'

@utils.trace_api
def send_http_request(self, na_element, enable_tunneling=False):

    if ((not na_element) or (not isinstance(na_element, NaElement))):
        raise ValueError('NaElement    must    be    supplied    to    invoke    API')
    (request, request_element) = self._create_request(na_element, enable_tunneling)
    if ((not hasattr(self, '_opener')) or (not self._opener) or self._refresh_conn):
        self._build_opener()
    try:
        if hasattr(self, '_timeout'):
            response = self._opener.open(request, timeout=self._timeout)
        else:
            response = self._opener.open(request)
    except urllib.error.HTTPError as e:
        raise NaApiError(e.code, e.msg)
    except Exception:
        LOG.exception('Error    communicating    with    NetApp    filer.')
        raise NaApiError('Unexpected    error')
    response_xml = response.read()
    response_element = self._get_result(response_xml)
    return response_element
