Do a soap request.

def soap_action(self, service, action, payloadbody):
        """Do a soap request."""
        payload = self.soapenvelope.format(body=payloadbody).encode('utf-8')
        headers = {"Host": self.url,
                   "Content-Type": "text/xml; charset=UTF-8",
                   "Cache-Control": "no-cache",
                   "Content-Length": str(len(payload)),
                   "SOAPAction": action}
        try:
            self.last_exception = None
            response = requests.post(url=self.url + service, headers=headers,
                                     data=payload, cookies=self.cookies)
        except requests.exceptions.RequestException as exp:
            self.last_exception = exp
            return False
        if response.status_code != 200:
            self.last_response = response
            return False
        self.cookies = response.cookies
        try:
            xdoc = xml.etree.ElementTree.fromstring(response.text)
        except xml.etree.ElementTree.ParseError as exp:
            self.last_exception = exp
            self.last_response = response
            return False
        return xdoc