Skip to main content
 首页 » 编程设计

php之使用 PHP 调用 Python 网络服务

2025年05月04日17www_RR

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 exception: [helloFault] hello() takes exactly 2 arguments (1 given) in C:\website\cosmetics\src\test02.php:15 Stack trace: #0 C:\website\cosmetics\src\test02.php(15): SoapClient->__soapCall('hello', Array) #1 {main}

如何解决这个问题?谢谢。

请您参考如下方法:

不确定 SoapClient 到底是什么,但看起来它需要另一个参数。文档怎么说?