使用PHP调用Python web服务


Call Python web service using PHP

Python Web服务代码:

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()正好接受2个参数(1给定)在C:''website''cometics ''src''test02.php:15堆栈跟踪:#0C: ''网站''化妆品'' src''test02.php(15):SoapClient->__soapCall('hello',Array)#1{main}

如何解决这个问题?谢谢

不确定SoapClient到底是什么,但看起来它需要另一个参数。文件上写着什么?