PHP中简单使用XMLRPC,服务器端和客户端都为PHP代码实现。

  这里使用的XML-RPC完整包括client和server的XML-RPC实现。
  客户端和服务器端分别由 xmlrpc_client 类和 xmlrpc_server 类实现,主要用于接收和发送XML-RPC报文。

客户端:

  xmlrpcval 类用于将PHP变量编码为XML-RPC等价数据类型和向远程方法传递参数。相反的过程使用 xmlrpc_decode() 函数。

  xmlrpcmsg 类通过传递给它一个参数表来创建XML-RPC报文。
  xmlrpc_client 类发送使用 xmlrpcmsg 类创建的XML-RPC报文。

服务器端:

  xmlrpc_server 类解析这些收到的报文(xmlrpcmsg 对象)为PHP变量。

  然后被作为一个单独参数传递给用户函数,该函数必须返回一个 xmlrpcresp 对象,。

  xmlrpc_server 类将其用于序列化并返回给客户端。

服务器端:xmlrpc_s.php

  1. <?php
  2. /*XMLRPC服务器(PHP版)*/
  3.  
  4. require "libphpxmlrpc/xmlrpc.inc";
  5. require "libphpxmlrpc/xmlrpcs.inc";
  6.  
  7. function saySomething($msg)
  8. {
  9. //从msg对象中解码出参数放入变量中
  10. $words = php_xmlrpc_decode($msg->getParam(0));
  11.  
  12. //返回结果
  13. if(strlen($words) > 0)
  14. {
  15. return new xmlrpcresp( new xmlrpcval('Server say: '.$words, 'string') );//返回给客户的
  16. }
  17. else
  18. {
  19. return new xmlrpcresp(0,$xmlrpcerruser + 100, "paras '".$words."' understand.");
  20. //出现错误返回给客户的,当然也可以不返回
  21. //如果有什么参数不对啊 系统会返回错误的
  22. //$xmlrpcerruser + 100 这个是返回客户自定义错误时候的错误代码
  23. //开发RPC程序的时候最好自己定义一个错误表客户端显示的错误编号会是100
  24. }
  25. }
  26.  
  27. //建立服务器
  28. $s = new xmlrpc_server(array('say' => array('function' => 'saySomething', //命令对应要调用的函数
  29. 'signature' => array(array('string','string')), //返回输入的数据类型,一个函数可以有几种输入和输出类型
  30. 'docstring' => 'This service echoes Hello+input stirng.')), //对该调用的说明
  31. 0 //此参数决定此时不立即开启服务
  32. );
  33.  
  34. //设置参数
  35. $s->response_charset_encoding = "UTF-8";
  36.  
  37. //开启服务
  38. $s->service();
  39. ?>

客户端:xmlrpc_c.php

  1. <?php
  2. //引入xmlrpc开发库
  3. require('libphpxmlrpc/xmlrpc.inc');
  4.  
  5. //建立连接器
  6. $client = new xmlrpc_client('/PHPWorkspace/xmlrpc_s.php', 'localhost', 80);
  7.  
  8. $client->request_charset_encoding = 'UTF-8';
  9.  
  10. //可以设置调试来查看详细HTTP请求信息
  11. if($_GET['debug']) $client->setDebug(true);
  12.  
  13. //创建xmlrpcval对象,将PHP变量编码为XML-RPC需要的XML形式
  14. $input = new xmlrpcval('Hello!', 'string');
  15.  
  16. //参数都要放入到数组中
  17. $paras = array($input);
  18.  
  19. //创建XML-RPC报文
  20. $msg = new xmlrpcmsg('say', $paras);
  21.  
  22. //用刚才建立的连接器发送请求
  23. $rsp = $client->send($msg);
  24.  
  25. //处理服务器的返回值
  26. if(0 == $rsp->faultcode())
  27. {
  28. //解码
  29. $response = php_xmlrpc_decode($rsp->value());
  30.  
  31. //显示结果
  32. #var_dump($response);
  33. echo $response;
  34. }
  35. else
  36. {
  37. //发生错误
  38. print 'Error: '.$rsp->faultcode().', '.$rsp->faultstring().'';
  39. }
  40. ?>
  1. 其中需要引入xmlrpc开发库,不清楚的话可以参考本人前一篇博客,当中有提到。
  2.  
  3. 在浏览器中打开客户端文件,效果如下图:

PHP中使用XMLRPC的更多相关文章

  1. Python中关于XML-RPC原理

    SimpleXMLRPCServer模块为XML-RPC服务端的写入提供了一个基本的框架.利用SimpleXMLRPCServer服务器既可以一直空闲,也可以利用CGIXMLRPCRequestHan ...

  2. Python中的XMLRPC(Calendar)

    XMLRPC服务器端代码,定义了三个方法名,getMonth获取所给月份的日历,getYear获取一年的日历,getDict测试返回字典的效果. xmlrpc_server.py: #!/usr/bi ...

  3. Python中使用XMLRPC(入门)

    一.简介 RPC是Remote Procedure Call的缩写,翻译成中文为:远程方法调用. 它是一种在本地机器上调用远端机器上的一个过程(方法)的技术,这个过程也被大家称为“分布式计算”,是为了 ...

  4. 开启kbmmw 5.09 中的XML-RPC和 JSON-RPC 服务

    kbmmw 5.09 里面增加了XML-RPC和 JSON-RPC 服务支持,但是默认没有开启. 需要在安装前,修改kbmMWConfig.inc文件. 加入以下定义 {$DEFINE KBMMW_J ...

  5. (转载)Linux 套接字编程中的 5 个隐患

    在 4.2 BSD UNIX® 操作系统中首次引入,Sockets API 现在是任何操作系统的标准特性.事实上,很难找到一种不支持 Sockets API 的现代语言.该 API 相当简单,但新的开 ...

  6. xmlrpc

    xmlrpc编辑 官方URL:http://ws.apache.org/xmlrpc/xmlrpc2/index.html 本词条缺少名片图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧! x ...

  7. XML-RPC 实现C++和C#交互

    我们通常会面对这样的问题:整合不同平台或不同类库,这些类库可能来自不同的语言,甚至不同的操作系统. 如何解决这类棘手的问题呢? 一.方案介绍 解决不同语言交互的方法有不少,对我了解的windows系统 ...

  8. XmlRpc with C#/Java【转】

    最近看了几个项目都是用xmlrpc协作完成的,就做了几个测试客户端和服务器端和大家一起分享.希望能对入门的同学有帮助 关于xmlrpc的介绍和规范参考http://www.xml-rpc.net/ 下 ...

  9. python xmlrpc

    rpc 协议 RPC = Remote Procedure Call Protocol,即远程过程调用协议. xml rpc 协议 使用http协议作为传输协议,使用xml文本传输命令和数据的一种协议 ...

随机推荐

  1. TASK_KILLABLE:Linux 中的新进程状态【转】

    转自:https://www.ibm.com/developerworks/cn/linux/l-task-killable/index.html 新的睡眠状态允许 TASK_UNINTERRUPTI ...

  2. try_module_get和module_put【转】

    转自:http://blog.csdn.net/adaptiver/article/details/7000617 转自:http://apps.hi.baidu.com/share/detail/4 ...

  3. ANSI、ASCII、Unicode和UTF-8编码

    来自:http://blog.163.com/yang_jianli/blog/static/161990006201371451851274/ --------------------------- ...

  4. STL模板整理 map

    map容器: 继上一篇 ,Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能 ...

  5. ZCMU训练赛-J(循环节+字符串处理)

    J - Java Beans There are N little kids sitting in a circle, each of them are carrying some java bean ...

  6. HDU 2050 折线分割平面(转)

    折线分割平面 http://acm.hdu.edu.cn/showproblem.php?pid=2050 Problem Description 我们看到过很多直线分割平面的题目,今天的这个题目稍微 ...

  7. CSS 从入门到放弃系列:CSS的引入方式

    css的四种引入方式 内联方式(行间样式) <div style="width:100px;height: 100px; background-color: red"> ...

  8. 福州三中基训day2

    今天讲的BFS,不得不说,福建三中订的旅馆是真的劲,早餐极棒!!! 早上和yty大神边交流边听zld犇犇讲BFS,嘛,今天讲的比较基础,而且BFS也很好懂(三天弄过一道青铜莲花池的我好像没资格说),除 ...

  9. 如何加快exp/imp的速度 - direct=y

       http://blog.itpub.net/35489/viewspace-613625 Oracle9i 或 10g  . 1.  内存中关系到exp的速度的是  large_pool_siz ...

  10. 子域名/目录暴力工具Gobuster

    子域名/目录暴力工具Gobuster   Gobuster是Kali Linux默认安装的一款暴力扫描工具.它是使用Go语言编写的命令行工具,具备优异的执行效率和并发性能.该工具支持对子域名和Web目 ...