If you need to interact with a server that implements web services in Simple Object Access Procedure (SOAP), then this recipe can help to get a starting point.
We can use the third-party SOAPpy
library for this task. This can be installed by running the following command:
$pip install SOAPpy
We create a proxy instance and introspect the server methods before we can call them.
In this recipe, let's interact with an Amazon S3 storage service. We have got a test URL for the web services API. An API key is necessary to do this simple task.
Listing 8.5 gives the code for searching for SOAP methods from an Amazon S3 web service, as shown:
#!/usr/bin/env python # Python Network Programming Cookbook -- Chapter – 8 # This program is optimized for Python 2.7. # It may run on any other version with/without modifications. import SOAPpy TEST_URL = 'http://s3.amazonaws.com/ec2-downloads/2009-04-04.ec2.wsdl' def list_soap_methods(url): proxy = SOAPpy.WSDL.Proxy(url) print '%d methods in WSDL:' % len(proxy.methods) + ' ' for key in proxy.methods.keys(): "Key Details:" for k,v in proxy.methods[key].__dict__.iteritems(): print "%s ==> %s" %(k,v) if __name__ == '__main__': list_soap_methods(TEST_URL)
If you run this script, it will print the total number of available methods that support web services definition language (WSDL) and the details of one arbitrary method, as shown:
$ python 8_5_search_amazonaws_with_SOAP.py /home/faruq/env/lib/python2.7/site-packages/wstools/XMLSchema.py:1280: UserWarning: annotation is ignored warnings.warn('annotation is ignored') 43 methods in WSDL: Key Name: ReleaseAddress Key Details: encodingStyle ==> None style ==> document methodName ==> ReleaseAddress retval ==> None soapAction ==> ReleaseAddress namespace ==> None use ==> literal location ==> https://ec2.amazonaws.com/ inparams ==> [<wstools.WSDLTools.ParameterInfo instance at 0x8fb9d0c>] outheaders ==> [] inheaders ==> [] transport ==> http://schemas.xmlsoap.org/soap/http outparams ==> [<wstools.WSDLTools.ParameterInfo instance at 0x8fb9d2c>]
This script defines a method called list_soap_methods()
that takes a URL and constructs a SOAP proxy object by calling the WSDL.Proxy()
method of SOAPpy
. The available SOAP methods are available under this proxy's method attribute.
An iteration over the proxy's method keys are done to introspect the method keys. A for
loop just prints the details of a single SOAP method, that is, the name of the key and details about it.
3.15.219.130