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

  

原文地址:https://www.cnblogs.com/hyh123/p/5942036.html