Python SOAP

Da Andreabont's Wiki.

SOAP è un tipo di chiamata a funzione remota (RPC) via TCP/IP che sfrutta la codifica XML nel protocollo e standardizzata dal W3C. E' famoso per l'uso del file di specifica WSDL. Visita la Pagina SOAP su Wikipedia o la Wiki ufficiale della libreria.

Installazione della libreria

pip install pysimplesoap

Server

from pysimplesoap.server import SoapDispatcher, SOAPHandler
from http.server import BaseHTTPRequestHandler,HTTPServer

def adder(a,b):
    "Add two values"
    return a+b

dispatcher = SoapDispatcher(
    'my_dispatcher',
    location = "http://localhost:8008/",
    action = 'http://localhost:8008/', # SOAPAction
    namespace = "http://example.com/sample.wsdl", prefix="ns0",
    trace = True,
    ns = True)

# register the user function
dispatcher.register_function('Adder', adder,
    returns={'AddResult': int}, 
    args={'a': int,'b': int})

print("Starting server...")
httpd = HTTPServer(("", 8008), SOAPHandler)
httpd.dispatcher = dispatcher
httpd.serve_forever()

NB: Questa libreria genera automaticamente il WSDL che si può recuperare all'indirizzo http://localhost:8008/

Client senza WSDL

from pysimplesoap.client import SoapClient, SoapFault

# create a simple consumer
client = SoapClient(
    location = "http://localhost:8008/",
    action = 'http://localhost:8008/', # SOAPAction
    namespace = "http://example.com/sample.wsdl", 
    soap_ns='soap',
    ns = False)

# call the remote method
response = client.Adder(a=1, b=2)

# extract and convert the returned value
result = response.AddResult
print(int(result))

Client con WSDL

from pysimplesoap.client import SoapClient

client = SoapClient(wsdl="http://127.0.0.1:8008")
response = client.Adder(a=1,b=2)
result = response['AddResult']
print(result)