将数组从Python发送到PHP

时间:2019-06-02 06:41:04

标签: php python arrays wsdl ws

我正在尝试使用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)并且可以正常工作。

1 个答案:

答案 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()