pythonsoapsoap-clientzeep

python zeep: send un-escaped xml as content


I think what I am trying to do is pretty much like github issue in zeep repo --- but sadly there is no response to this issue yet. I researched suds and installed and tried -- did not even get sending parameter to work and thought zeep seems better maintained?

Edit 1: For sure I am not talking about this


Solution

  • You can use a Plugin for editing the xml as a plain string. I used this plugin for keeping the characters '<' and '>' in a CDATA element.

    from xml import etree
    from zeep import Plugin
    
    class my_plugin(Plugin):
    
        def egress(self, envelope, http_headers, operation, binding_options):
            xml_string = etree.ElementTree.tostring(envelope)
            xml_string = xml_string.replace("&lt;", "<")
            xml_string = xml_string.replace("&gt;", ">")
            parser = etree.ElementTree.XMLParser(strip_cdata=False)
            new_envelope = etree.ElementTree.XML(xml_string, parser=parser)
            return new_envelope, http_headers
    

    Then just import the plugin on the client:

    client = Client(wsdl='url', transport=transport, plugins=[my_plugin()])
    

    Take a look at the docs: http://docs.python-zeep.org/en/master/plugins.html