使用PHP调用Python网络服务

2 投票
1 回答
1468 浏览
提问于 2025-04-17 12:34

Python网络服务代码:

import web 
from soaplib.wsgi_soap import SimpleWSGISoapApp
from soaplib.service import soapmethod
from soaplib.serializers import primitive as soap_types

urls = ("/hello", "HelloService",
        "/hello.wsdl", "HelloService",
        )
render = web.template.Template("$def with (var)\n$:var")



class SoapService(SimpleWSGISoapApp):
    """Class for webservice """
    @soapmethod(soap_types.String,_returns=soap_types.String)
    def hello(self,message):
        """ Method for webservice"""
        return "Hello world "+message



class HelloService(SoapService):
    """Class for web.py """
    def start_response(self,status, headers):
        web.ctx.status = status
        for header, value in headers:
            web.header(header, value)


    def GET(self):
        response = super(SimpleWSGISoapApp, self).__call__(web.ctx.environ, self.start_response)
        return render("\n".join(response))


    def POST(self):
        response = super(SimpleWSGISoapApp, self).__call__(web.ctx.environ, self.start_response)
        return render("\n".join(response))

app=web.application(urls, globals())

if __name__ == "__main__":
    app.run()

PHP代码:

<?php

    @ini_set("soap.wsdl_cache_enabled", "0");


    $client = new SoapClient('http://localhost:8080/hello.wsdl');

    echo("<pre>");
    var_dump($client->__getFunctions());
    echo("</pre>");
    $params = array('World');


    try {
        print_r($client->__soapCall('hello', $params));

    } catch (SoapFault $exception) {
        echo $exception;
    }
?>

当我运行我的PHP代码时,出现了下面的信息:

SoapFault异常:[helloFault] hello() 需要两个参数(只给了一个)在 C:\website\cosmetics\src\test02.php 的第15行 堆栈跟踪:#0 C:\website\cosmetics\src\test02.php(15): SoapClient->__soapCall('hello', Array) #1 {main}

这个问题怎么解决呢?谢谢。

1 个回答

1

我不太确定SoapClient到底是什么,但看起来它需要一个额外的参数。文档是怎么说的呢?

撰写回答