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

      

  • 相关阅读:
    解读AppIcon图标设置置信息和App内存警告临界值
    我在外包公司做增删改查有前途么?
    浅议Grpc传输机制和WCF中的回调机制的代码迁移
    2019.NET Conf China(中国.NET开发者峰会)活动全纪录:.NET技术之崛起,已势不可挡
    一位年轻而优秀的.NET开发者的成长点滴
    领域驱动设计-让程序员心中有码(九)
    2019.NET Conf,我们在共同期待
    码农的技术小世界
    .NET Core使用gRPC打造服务间通信基础设施
    坚持写了一年的博客,我有哪些收获
  • 原文地址:https://www.cnblogs.com/hyh123/p/5942036.html
Copyright © 2011-2022 走看看