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>';*/
?>