Python与PHP通过XMLRPC进行通信
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 getVersion(self): return "Powerd By Python 1.0" #打印字符串的方法 def echoString(self, strs): s = u'From Python - ' return s + strs #加法运算的方法 def add(self, num1, num2): sums = num1 + num2 s = 'sum:' + str(sums) return s #创建实例 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 /** *xmlrpc_client.php *XML-RPC客户端演示程序 */ //引入xmlrpc开发库 #require('libphpxmlrpc/xmlrpc.inc'); include('libphpxmlrpc/xmlrpc.inc'); //show messages 查看报文内容的函数 function show_message($msg,$rsp) { $msg->createpayload(); print 'REQUEST:<xmp>'.$msg->payload.'</xmp>'; print 'RESPONSE:<xmp>'.$rsp->serialize().'</xmp>'; } //创建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 = new xmlrpcval('Hello World!', 'string'); #$num1 = new xmlrpcval(1, 'int'); #$num2 = new xmlrpcval(2, 'int'); #$inputString = php_xmlrpc_encode('Hello World!'); $num1 = php_xmlrpc_encode(1); $num2 = php_xmlrpc_encode(2); //create an array of parameters, xmlrpcmsg的第二个参数是一个参数表,因此参数要转换成数组的形式 #$parameters = array($inputString); $parameters = array($num1, $num2); //create the message object, 创建XML-RPC报文,参数分别为 远程方法名 和 参数表 #$msg = new xmlrpcmsg('getVersion'); #$msg = new xmlrpcmsg('echoString', $parameters); $msg = new xmlrpcmsg('add', $parameters); $client->request_charset_encoding = 'utf-8'; $client->debug = true; //send the message, get the response /*发送报文,返回值为一个xmlrpcresp对象,它包含以下三个方法: 1.faultCode() 出错代码,如果成功将返回0 2.faultString() 出错信息 3.value() 返回值,以xmlrpcval对象形式存在,PHP使用前需要进行解码 */ $rsp = $client->send($msg); //check for errors if(0 == $rsp->faultcode()) { //decode the response to a PHP type, 将xmlrpcval对象解码 $response = php_xmlrpc_decode($rsp->value()); //print results print '<pre>'; var_dump($response); #echo $response; #print_r($response); print '</pre>'; } else { //print errors print 'Error: '.$rsp->faultcode().', '.$rsp->faultstring().'<br>'; } //show messages, 查看报文内容 #show_message($msg,$rsp); ?>
其中,客户端需要php语言的xmlrpc开发库。
下载地址:http://download.csdn.net/detail/lsmallstop/7741211
下载后,将其lib目录拷贝出来并命名为libphpxmlrpc,放到和上面php文件同一个目录下。