热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PHP中应用XML-RPC结构Web Service简略进门

[WebService先容]WebService就是为了异构系统的通信而产生的,它基础的思想就是应用基于XML的HTTP的远程调用供给一种尺度的机制,而省往建立一种新协议的需求。目前进行WebService通信有
[Web Service先容 ]

Web Service就是为了异构系统的通信而产生的,它基础的思想就是应用基于XML的HTTP的远程调用供给一种尺度的机制,而省往建立一种新协议的需求。目前进行Web Service通信有两种协议尺度,一种是XML-RPC,另外一种是SOAP。XML-RPC比拟简略,呈现时间比拟早,SOAP比拟复杂,重要是一些需要稳固、硬朗、安全并且复杂交互的时候应用。

PHP中集成了XML-RPC和SOAP两种协议的拜访,都是集中在xmlrpc扩大当中。另外,在PHP的PEAR中,不管是PHP 4还是PHP 5,都已经默认集成了XML-RPC扩大,而且该扩大跟xmlrpc扩大无关,能够独立实现XML-RPC的协议交互,假如没有xmlrpc扩大,建议应用PEAR::XML-RPC扩大。

我们这里重要是以XML-RPC来简略描写Web Service的交互过程,部分内容来自PHP手册,更具体内容,建议参考手册。


[安装xmlrpc扩大 ]

假如你的系统中没有安装xmlrpc的php扩大,那么请准确安装。

在Windows平台下,首先把PHP安装目录下的扩大php_xmlrpc.dll放到C:\Windows或者C:\Winnt目录下,(PHP4的扩大在C:\php\extensions目录中,PHP5的扩大在C:\php\ext目录中),同时在C:\Windows\php.ini或者C:\Winnt\php.ini中把extension=php_xmlrpc.dll前面的分号';'往掉,然后重启Web服务器后查看phpinfo()有没有XML-RPC项目就能够断定是否已经准确安装xmlrpc扩大。

在Unix/Linux平台下,假如没有安装xmlrpc扩大,请在重新编译PHP,在configure的时候请参加 --with-xmlrpc 选项,然后查看phpinfo()看是否正常安装xmlrpc。

(留心:以下把持都是建立在xmlrpc扩大正常安装条件下,请务必准确安装。)


[XML-RPC工作原理 ]

XML-RPC大致就是全部过程就是应用XML来进行通信。首先结构一个RPC 服务器端用来出来从RPC客户端传递过来的应用XML封装的恳求,并且把处理成果通过XML的情势返回给RPC客户端,客户端就往分析XML获取自己需要的数据。

XML-RPC的服务器端必需有现成的函数供给应客户端调用,并且客户端提交的恳求中的函数和方法必需和服务器真个一致,否则将无法获取所需要的成果。

下面我进行简略的代码来描写全部过程。


[XML-RPC实践 ]

服务器端应用xmlrpc_server_create函数产生一个服务器端,然后把需要需要***露的RPC调用接口进行注册,接收RPC客户端POST过来的XML数据,然落后行处理,处理成果通过XML的情势显示给客户端。

代码如下: rpc_server.php

/**
* 函数:供给应RPC客户端调用的函数
* 参数:
* $method 客户端需要调用的函数
* $params 客户端需要调用的函数的参数数组
* 返回:返回指定调用成果
*/
function rpc_server_func($method, $params) {
$parameter = $params[0];
if ($parameter == 'get')
{
$return = ''This data by get method'';
}
else
{
$return = ''Not specify method or params'';
}
return $return;
}

//产生一个XML-RPC的服务器端
$xmlrpc_server = xmlrpc_server_create();

//注册一个服务器端调用的方法rpc_server,实际指向的是rpc_server_func函数
xmlrpc_server_register_method($xmlrpc_server, 'rpc_server', 'rpc_server_func');

//接收客户端POST过来的XML数据
$request = $HTTP_RAW_POST_DATA;

//履行调用客户真个XML恳求后获取履行成果
$xmlrpc_respOnse= xmlrpc_server_call_method($xmlrpc_server, $request, null);

//把函数处理后的成果XML进行输出
header(''Content-Type: text/xml'');
echo $xmlrpc_response;

//烧毁XML-RPC服务器端资源
xmlrpc_server_destroy($xmlrpc_server);
?>

服务器端结构好了,那么再结构我们的RPC客户端。客户端大致通过Socket拜访XML-RPC服务器真个80端口,然后把需要调用的RPC接口封装到XML里,通过POST恳求提交给RPC服务器端,最后获取服务器端返回成果。

代码如下:rpc_client.php

/**
* 函数:供给应客户端进行连接XML-RPC服务器真个函数
* 参数:
* $host需要连接的主机
* $port连接主机的端口
* $rpc_server XML-RPC服务器端文件
* $request封装的XML恳求信息
* 返回:连接成功成功返回由服务器端返回的XML信息,失败返回false
*/
function rpc_client_call($host, $port, $rpc_server, $request) {

//打开指定的服务器端
$fp = fsockopen($host, $port);

//结构需要进行通信的XML-RPC服务器真个查询POST恳求信息
$query = 'POST $rpc_server HTTP/1.0\nUser_Agent: XML-RPC Client\nHost: '.$host.'\nContent-Type: text/xml\nContent-Length: '.strlen($request).'\n\n'.$request.'\n';

//把结构好的HTTP协议发送给服务器,失败返回false
if (!fputs($fp, $query, strlen($query)))
{
$errstr = 'Write error';
return false;
}

//获取从服务器端返回的所有信息,包含HTTP头和XML信息
$cOntents= '''';
while (!feof($fp))
{
$contents .= fgets($fp);
}

//封闭连接资源后返回获取的内容
fclose($fp);
return $contents;
}

//结构连接RPC服务器真个信息
$host= ''localhost'';
$port= 80;
$rpc_server = ''/~heiyeluren/rpc_server.php'';

//把需要发送的XML恳求进行编码成XML,需要调用的方法是rpc_server,参数是get
$request = xmlrpc_encode_request(''rpc_server'', ''get'');

//调用rpc_client_call函数把所有恳求发送给XML-RPC服务器端后获取信息
$respOnse= rpc_client_call($host, $port, $rpc_server, $request);

//分析从服务器端返回的XML,往掉HTTP头信息,并且把XML转为PHP能辨认的字符串
$split = '''';
$xml =explode($split, $response);
$xml = $split . array_pop($xml);
$respOnse= xmlrpc_decode($xml);

//输出从RPC服务器端获取的信息
print_r($response);

?>


大致我们上面的例子就是提交一个叫做rpc_server的方法过往,参数是get,然后获取服务器真个返回,服务器端返回的XML数据是:






This data by get method





那么我们再通过xmlrpc_decode函数把这个XML编码为PHP的字符串,我们就能够随便处理了,全部Web Service交互完成。


[结束语 ]

不管是XML-RPC也好,SOAP也罢,只要能够让我们稳固、安全的进行远程过程的调用,完成我们的项目,那么就算全部Web Service就是成功的。另外,假如可以的话,也可以尝试应用PEAR中的XML-RPC来实现上面类似的把持,说不定会更简略,更合适你应用。

简略的应用XML-RPC进行Web Service交互就完成了,部分代码参考PHP手册,想获取具体信息建议参考手册,假如文章有不准确,请指正。
推荐阅读
  • 如何将PHP文件上传至服务器及正确配置服务器地址 ... [详细]
  • 本文首先对信息漏洞的基础知识进行了概述,重点介绍了几种常见的信息泄露途径。具体包括目录遍历、PHPINFO信息泄露以及备份文件的不当下载。其中,备份文件下载涉及网站源代码、`.bak`文件、Vim缓存文件和`DS_Store`文件等。目录遍历漏洞的详细分析为后续深入研究奠定了基础。 ... [详细]
  • Windows环境下详细教程:如何搭建Git服务
    Windows环境下详细教程:如何搭建Git服务 ... [详细]
  • 内网渗透技术详解:PTH、PTT与PTK在域控环境中的应用及猫盘内网穿透配置
    本文深入探讨了内网渗透技术,特别是PTH、PTT与PTK在域控环境中的应用,并详细介绍了猫盘内网穿透的配置方法。通过这些技术,安全研究人员可以更有效地进行内网渗透测试,解决常见的渗透测试难题。此外,文章还提供了实用的配置示例和操作步骤,帮助读者更好地理解和应用这些技术。 ... [详细]
  • 本文深入探讨了ASP.NET中ViewState、Cookie和Session三种状态管理技术的区别与应用场景。ViewState主要用于保存页面控件的状态信息,确保在多次往返服务器过程中数据的一致性;Cookie则存储在客户端,适用于保存少量用户偏好设置等非敏感信息;而Session则在服务器端存储数据,适合处理需要跨页面保持的数据。文章详细分析了这三种技术的工作原理及其优缺点,并提供了实际应用中的最佳实践建议。 ... [详细]
  • 大数据应用实例:电视收视率分析企业项目实操第二篇
    本文继续探讨大数据在电视收视率分析中的应用,详细介绍了如何在CentOS系统中进行防火墙管理。针对CentOS 6.5及更早版本,提供了具体的命令操作步骤,包括停止防火墙服务和禁用防火墙启动。此外,还深入讨论了这些操作对数据传输和系统安全的影响,为实际项目实施提供了宝贵的技术参考。 ... [详细]
  • Spring Security 认证模块的项目构建与初始化
    本文详细介绍了如何构建和初始化Spring Security认证模块的项目。首先,通过创建一个分布式Maven聚合工程,该工程包含四个模块,分别为core、browser(用于演示)、app等,以构成完整的SeehopeSecurity项目。在项目构建过程中,还涉及日志生成机制,确保能够输出关键信息,便于调试和监控。 ... [详细]
  • 在Linux环境下,本文详细探讨了Apache服务器中CGI技术的应用与实现。首先,通过使用yum包管理器安装了必要的软件,如PHP。安装完成后,对Apache服务器进行了配置,确保CGI功能正常运行。此外,还介绍了如何编写和调试CGI脚本,以及如何在实际环境中部署这些脚本以提供动态网页内容。实验结果表明,通过合理的配置和优化,Apache服务器能够高效地支持CGI应用程序,为用户提供丰富的交互体验。 ... [详细]
  • 本文详细探讨了Java集合框架的使用方法及其性能特点。首先,通过关系图展示了集合接口之间的层次结构,如`Collection`接口作为对象集合的基础,其下分为`List`、`Set`和`Queue`等子接口。其中,`List`接口支持按插入顺序保存元素且允许重复,而`Set`接口则确保元素唯一性。此外,文章还深入分析了不同集合类在实际应用中的性能表现,为开发者选择合适的集合类型提供了参考依据。 ... [详细]
  • Ceph API微服务实现RBD块设备的高效创建与安全删除
    本文旨在实现Ceph块存储中RBD块设备的高效创建与安全删除功能。开发环境为CentOS 7,使用 IntelliJ IDEA 进行开发。首先介绍了 librbd 的基本概念及其在 Ceph 中的作用,随后详细描述了项目 Gradle 配置的优化过程,确保了开发环境的稳定性和兼容性。通过这一系列步骤,我们成功实现了 RBD 块设备的快速创建与安全删除,提升了系统的整体性能和可靠性。 ... [详细]
  • Python网络爬虫入门:利用urllib库进行数据抓取
    Python网络爬虫入门:利用urllib库进行数据抓取在数据科学和Web开发领域,Python凭借其简洁高效的特性成为首选语言。本文主要介绍了如何在Windows环境下使用Python的urllib库进行基本的网络数据抓取。考虑到命令行操作的不便,作者选择了Jupyter Notebook作为开发环境,不仅简化了配置过程,还提供了直观的数据处理和可视化功能。通过实例演示,读者可以轻松掌握urllib的基本用法,为深入学习网络爬虫技术打下坚实基础。 ... [详细]
  • 全面解析:Hadoop技术栈中的Linux操作系统概览
    全面解析:Hadoop技术栈中的Linux操作系统概览 ... [详细]
  • 可转债数据智能抓取与分析平台优化
    本项目旨在优化可转债数据的智能抓取与分析平台。通过爬取集思录上的可转债信息(排除已发布赎回的债券),并结合安道全教授提出的三条安全线投资策略,新增了建仓线、加仓线和重仓线,以提供更精准的投资建议。 ... [详细]
  • 如何利用Apache与Nginx高效实现动静态内容分离
    如何利用Apache与Nginx高效实现动静态内容分离 ... [详细]
  • 本文详细介绍了 Sublime Text 3 在 2021 年的激活密钥及其在线激活方法。用户可以通过提供的链接访问云海天教程,获取更多详细的激活码信息和操作步骤。此外,文章还提供了安全可靠的激活方案,帮助用户顺利激活软件,提升编程效率。 ... [详细]
author-avatar
蓬从蓉Tahirah
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有