We had the same problem with an ASP.NET-based server (error message when using python / suds, the same request worked in SoapUi); after a lot of digging, we found that we needed to add a SOAP header (as an XML element) that contains the action; the actions in the Content-Type or SOAPAction headers were inadequate (but not painful). Here is an example of a successful request (from SoapUi):
<SOAP-ENV:Envelope xmlns:ns0="..." xmlns:ns1="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENV="http://www.w3.org/2003/05/soap-envelope"> <SOAP-ENV:Header xmlns:wsa="http://www.w3.org/2005/08/addressing"><wsa:Action>http://www.foo.com/.../SomeJob/getParameters</wsa:Action></SOAP-ENV:Header> <ns1:Body> <ns0:getParameters>...</ns0:getParameters> </ns1:Body> </SOAP-ENV:Envelope>
With Python and SUDS, we did this:
from suds.sax.element import Element wsans = ('wsa', "http://www.w3.org/2005/08/addressing") client.set_options(soapheaders = Element('Action', ns=wsans).setText(action))
An action can be requested from a method, i.e. if you want to call client.service.foo method use
action = client.service.foo.method.soap.action
We found this by looking at the SoapUi protocol log. (We also tried Wireshark, but that didn't work, because we are trying to use an https server that we donβt have.)
source share