Python与PHP通过XMLRPC进行通信:服务器端用Python,客户端用PHP。
服务器端:xmlrpc_server.py
#!/usr/bin/python # coding: UTF-8 from SimpleXMLRPCServer import SimpleXMLRPCServer from SocketServer import ThreadingMixIn class ThreadXMLRPCServer(ThreadingMixIn, SimpleXMLRPCServer):pass #定义自己的CMS类 class MyCMS: def echoString(self, strs): s = u'From Python - ' return s + strs def sayHello(self): return "hello xmlprc" #创建实例 cms = MyCMS() server = ThreadXMLRPCServer(("localhost", 8888), allow_none=True) #注册 server.register_instance(cms) #服务器执行,并监听此端口 print "Listening on port 8888" server.serve_forever()
客户端:xmlrpc_client.php
<?php //XML-RPC客户端演示程序 ///require('libphpxmlrpc/xmlrpc.inc'); include('libphpxmlrpc/xmlrpc.inc'); $xmlrpc_internalencoding = 'UTF-8'; //创建client对象, 三个参数依次为 path, hostname, port $client=new xmlrpc_client('/', 'localhost', 8888); //create xmlrpcval object, which allows the encoding of our variable //创建xmlrpcval对象,将我们的PHP变量编码为XML-RPC需要的XML形式 $inputString = php_xmlrpc_encode('Hello World'); //create an array of parameters //尽管我们只有一个参数,但仍然要转换成数组的形式,因为xmlrpcmsg的第二个参数是一个参数表 $parameters=array($inputString); //create the message object //创建XML-RPC报文,参数分别为 远程方法名 和 参数表 $msg=new xmlrpcmsg('echoString', $parameters); ///$msg=new xmlrpcmsg('sayHello'); //$client->request_charset_encoding = 'utf-8'; //send the message, get the response //发送报文,返回值$rsp为一个xmlrpcresp对象,它包含以下三个方法: // faultCode() 出错代码,如果成功将返回0 // faultString() 出错信息 // value() 返回值,以xmlrpcval对象形式存在,PHP使用前需要进行解码 $client->debug = true; $rsp=$client->send($msg); //check for errors if($rsp->faultcode()==0) { //decode the response to a PHP type //xmlrpc_decode()函数用于将xmlrpcval对象解码 $response=php_xmlrpc_decode($rsp->value()); //print results print '<pre>'; var_dump($response); ///echo $response; print '</pre>'; } else { //print errors print 'Error: '.$rsp->faultcode().', '.$rsp->faultstring().'<br>'; } //show messages //查看一下报文内容 /*$msg->createpayload(); print 'REQUEST:<xmp>'.$msg->payload.'</xmp>'; print 'RESPONSE:<xmp>'.$rsp->serialize().'</xmp>';*/ ?>