zoukankan      html  css  js  c++  java
  • 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>';*/
    ?>
    

      

  • 相关阅读:
    yii修改密码 弹出修改成功提示(八)
    yii模型规则的简单使用以及开启前端的验证(七)
    利用ab测试并发可靠么
    yii数据库链接(六)
    初始化collectionViewCell
    监听事件
    ControllerEvent
    代码构建视图
    DeveloperAppleHelp
    Xcode 小技巧
  • 原文地址:https://www.cnblogs.com/hyh123/p/5942036.html
Copyright © 2011-2022 走看看