我正在尝试使用Python来使用PHP创建的WSDL。
服务片段:
require_once('lib/nusoap.php');
date_default_timezone_set('America/Mexico_City');
function Sum($numbers){
return array_sum($numbers);
}
...
客户:
from suds.client import Client
def wsarchivo():
url = "http://localhost/PracticeSumArray/server.php?wsdl"
client = Client(url)
res = client.service.Sum([1,2,3])
print(res)
wsarchivo()
但是在运行时,以这种方式发送参数不起作用,这与在PHP中使用客户端进行发送不同,发送参数的方式为'numbers' => array (1, 2, 3)
并且可以正常工作。
答案 0 :(得分:0)
我可以解决我的问题,我把它留在这里以防其他人有用,我犯的第一个错误是将输入参数声明为整个xsd:int
,所以我所做的就是将其声明为{{ 1}}在PHP的服务器上:
SOAP-ENC:Array
现在在Python客户端中,我使用了suds客户端的$server->register(
'Suma',
array('numbers' => 'SOAP-ENC:Array'),
array('return' => 'xsd:int'),
$ns
);
方法来声明类型为factory.create()
的变量
SOAP-ENC:Array
执行时:
from suds.client import Client
def wsarchivo():
client = Client("http://localhost/PracticaSumaArray/server.php?wsdl")
request = client.factory.create('SOAP-ENC:Array')
request.numbers = [1,2,3]
res = client.service.Suma(request)
print(res)
wsarchivo()