PHP中使用XMLRPC

  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/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

时间: 2024-11-20 23:28:24

PHP中使用XMLRPC的相关文章

Python中使用XMLRPC(入门)

一.简介 RPC是Remote Procedure Call的缩写,翻译成中文为:远程方法调用. 它是一种在本地机器上调用远端机器上的一个过程(方法)的技术,这个过程也被大家称为“分布式计算”,是为了提高各个分立机器的“互操作性”而发明出来的技术. XML-RPC的全称是XML Remote Procedure Call,即XML远程方法调用. 它是一套允许运行在不同操作系统.不同环境的程序实现基于Internet过程调用的规范和一系列的实现.这种远程过程调用使用http作为传输协议,XML作为

Python中的XMLRPC(Calendar)

XMLRPC服务器端代码,定义了三个方法名,getMonth获取所给月份的日历,getYear获取一年的日历,getDict测试返回字典的效果. xmlrpc_server.py: #!/usr/bin/python # coding: utf-8 import calendar, SimpleXMLRPCServer, time, string, os #创建 Server 对象 class Calendar: def getMonth(self, year, month): if(type(

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

我们通常会面对这样的问题:整合不同平台或不同类库,这些类库可能来自不同的语言,甚至不同的操作系统. 如何解决这类棘手的问题呢? 一.方案介绍 解决不同语言交互的方法有不少,对我了解的windows系统和.NET平台,有以下几种做法: P/Invoke: 调用native cpp的方法,处在同一个内存区间,访问方便,但包装困难,可能抛出运行时异常. 读写文件:通过一头读文件,一头写文件的方式实现交互.诸位别笑,本科时候我就用过这种方式解决问题. 命名管道/socket: 通过字节数组的方式实现交互

XmlRpc with C#/Java【转】

最近看了几个项目都是用xmlrpc协作完成的,就做了几个测试客户端和服务器端和大家一起分享.希望能对入门的同学有帮助 关于xmlrpc的介绍和规范参考http://www.xml-rpc.net/ 下面我就直奔主题举几个例子了 c#服务端 首先在VS中添加引用CookComputing.XmlRpc.dll 功能:仅仅返回一个拼接后的字符串 using System; using CookComputing.XmlRpc; namespace xmlrpcServerTest {     pub

python xmlrpc

rpc 协议 RPC = Remote Procedure Call Protocol,即远程过程调用协议. xml rpc 协议 使用http协议作为传输协议,使用xml文本传输命令和数据的一种协议.分成client和server. python 中的xmlrpc 使用Anaconda3安装的时候,已经在Lib下安装了xmlrpc,里面包含了client.py和server.py,直接import就可以使用了. 简单例子 server端 import xmlrpc.server class M

Linux 套接字编程中的 5 个隐患

在异构环境中开发可靠的网络应用程序 M. Tim Jones ([email protected]), 资深软件工程师, Emulex 简介: Socket API 是网络应用程序开发中实际应用的标准 API.尽管该 API 简单,但是开发新手可能会经历一些常见的问题.本文识别一些最常见的隐患并向您显示如何避免它们. 发布日期: 2005 年 10 月 08 日 级别: 中级 访问情况 : 13059 次浏览 评论: 0 (查看 | 添加评论 - 登录)  平均分 (34个评分)为本文评分 在

转 MetaWeblog API 编写

如今,许多人都熟悉个人和公司或业界主办的博客.后者明显成为了传统公司和行业网站的下一代新兴产物.博客的内容涉及从简洁的特制产品公告和公共关系到实用且深刻的主题探索,这些主题可能对公司的产品或行业的未来方向相关. 常用缩写词 API:应用程序编程接口 FTP:文件传输协议 HTTP:超文本传输协议 IT:信息技术 MIME:多媒体 Internet 邮件扩展(Multimedia Internet Mail Extensions) RFC:请求注解(Request for comments) RP

PHP内置函数大全

1 php内置函数大全 2 第2章 Apache函数 15 3 2.1 Apache信息获取类函数 15 4 2.1.1 apache_child_terminate函数:在本次请求结束后终止Apache进程 15 5 2.1.2 apache_get_modules函数:获取Apache的模块列表 16 6 2.1.3 apache_get_version函数:获取Apache的版本 16 7 2.1.4 apache_getenv函数:获取Apache的环境变量 17 8 2.1.5 apa

使用word发布博客

有关在 Word 中撰写博客的帮助 Word for Office 365 Word 2019 Word 2016 Word 2013 Word 2010 Word 2007 更多... 博客发布功能提供可在不依赖媒体渠道或传统印刷刊物的情况下发布文章的功能.本文说明如何在 Microsoft Office Word 中编写博客文章,然后直接发送到所选联机博客网站. 您要做什么? 选择博客发布服务 创建博客文章 注册博客帐户 向博文添加内容 向博文添加超链接 向博文添加图像 编辑现有博客文章 有