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

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

客户端:xmlrpc_c.php

<?php
//引入xmlrpc开发库
require('libphpxmlrpc/xmlrpc.inc'); //建立连接器
$client = new xmlrpc_client('/PHPWorkspace/xmlrpc_s.php', 'localhost', 80); $client->request_charset_encoding = 'UTF-8'; //可以设置调试来查看详细HTTP请求信息
if($_GET['debug']) $client->setDebug(true); //创建xmlrpcval对象,将PHP变量编码为XML-RPC需要的XML形式
$input = new xmlrpcval('Hello!', 'string'); //参数都要放入到数组中
$paras = array($input); //创建XML-RPC报文
$msg = new xmlrpcmsg('say', $paras); //用刚才建立的连接器发送请求
$rsp = $client->send($msg); //处理服务器的返回值
if(0 == $rsp->faultcode())
{
//解码
$response = php_xmlrpc_decode($rsp->value()); //显示结果
#var_dump($response);
echo $response;
}
else
{
//发生错误
print 'Error: '.$rsp->faultcode().', '.$rsp->faultstring().'';
}
?>
其中需要引入xmlrpc开发库,不清楚的话可以参考本人前一篇博客,当中有提到。

在浏览器中打开客户端文件,效果如下图:

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. 培训补坑(day7:线段树的区间修改与运用)(day6是测试,测试题解以后补坑QAQ)

    补坑咯~ 今天围绕的是一个神奇的数据结构:线段树.(感觉叫做区间树也挺科学的.) 线段树,顾名思义就是用来查找一段区间内的最大值,最小值,区间和等等元素. 那么这个线段树有什么优势呢? 比如我们要多次 ...

  2. HTTP===如何理解网关

    首先举个例子: 假设你的名字叫小不点(很小),你住在一个大院子里,你的邻居有很多小伙伴,父母是你的网关.当你想跟院子里的某个小伙伴玩,只要你在院子里大喊一声他的名字,他听到了就会回应你,并且跑出来跟你 ...

  3. OC的UUID生成

    NSString *uuidStr = [[NSUUID UUID] UUIDString];

  4. String类的常见方法的使用案例

    String类的常见方法的使用案例 //使用指定的字符串替换当前字符串中指定的内容 //将helloworld中的o替换为a String s="HelloWorld"; Stri ...

  5. vCard

    vCard 在翻阅dottoro的时候,在附录(appendix)的js部分,注意到一个叫vCard的部分,能单独列出来,可能是比较重要的,至少是比较独立的部分,但是以前从未听说或者了解过这一部分,如 ...

  6. 输入法出现 footer被挤上去的问题

    /** * 修改点击input输入框时的位置 *input框获取焦点footer隐藏,失去焦点时显示 */ $('.input-footer-none').on('focus',function(){ ...

  7. vmware的3种网络模式

    ####图片以及部分内容来源:https://note.youdao.com/share/?id=236896997b6ffbaa8e0d92eacd13abbf&type=note#/ 在安 ...

  8. Django基础之视图

    Django的View(视图) 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应. 响应可以是一张网页的HTML内容,一个重定向,一个404错误, ...

  9. python2.7安装Twisted报Microsoft Visual C++9.0 required

    环境: 操作系统:Windows 7 32位 语言:Python 2.7.9 Twisted: Twisted 安装,执行如下命令: pip install Twisted 报错如下: error:M ...

  10. php(间接)调用nmap命令时的选项特殊点

    使用php调用pythn-nmap时,发现无法正常执行扫描动作 将nmap命令直接写入php,由后者调用,发现仍然无法执行,提示需要添加“-Pn”选项 原来是: 正常情况下:nmap -n host ...