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文件同一个目录下。

 

你可能感兴趣的:(python)