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

 

posted @ 2014-08-11 19:02  紫清婷  阅读(...)  评论(...编辑  收藏