`
zxs19861202
  • 浏览: 916037 次
  • 性别: Icon_minigender_1
  • 来自: 湖北—》上海
社区版块
存档分类
最新评论

php xmlrpc

    博客分类:
  • php
 
阅读更多

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:phpextensions目录中,PHP5的扩展在C:phpext目录中),同时在
在apache 的安装目录下的php.ini中把extension=php_xmlrpc.dll前面的分号";"去掉,然后重
启Web服务器后查看phpinfo()有没有XML-RPC项目就能够确定是否已经正确安装xmlrpc扩展。

client.php

  1. <?php 
  2. /**
  3.  * 函数:提供给客户端进行连接XML-RPC服务器端的函数
  4.  * 参数:
  5.  * $host 需要连接的主机
  6.  * $port 连接主机的端口
  7.  * $request 封装的XML请求信息
  8.  * 返回:连接成功成功返回由服务器端返回的XML信息,失败返回false
  9.  */
  10. function do_call($host, $port, $request) { 
  11.     //打开指定的服务器端
  12.     $fp = fsockopen($host, $port, $errno, $errstr); 
  13.     //构造需要进行通信的XML-RPC服务器端的查询POST请求信息
  14.     $query = "POST /server.php HTTP/1.0\nUser_Agent: XML-RPC Client\nHost: ".$host."\nContent-Type: text/xml\nContent-Length: ".strlen($request)."\n\n".$request."\n"; 
  15.     //把构造好的HTTP协议发送给服务器,失败返回false
  16.     if (!fputs($fp, $query, strlen($query))) { 
  17.         $errstr = "Write error"; 
  18.         return 0; 
  19.     } 
  20.     //获取从服务器端返回的所有信息,包括HTTP头和XML信息
  21.     $contents = ''; 
  22.     while (!feof($fp)) { 
  23.         $contents .= fgets($fp); 
  24.     } 
  25.     //关闭连接资源后返回获取的内容
  26.     fclose($fp); 
  27.     return $contents; 
  28. } 
  29. //构造连接RPC服务器端的信息
  30. $host = '127.0.0.1'; 
  31. $port = 8080; 
  32. //把需要发送的XML请求进行编码成XML,需要调用的方法是cycle,参数是egg
  33. $request = xmlrpc_encode_request('cycle', 'egg'); 
  34. //调用do_call函数把所有请求发送给XML-RPC服务器端后获取信息
  35. $response = do_call($host, $port, $request); 
  36. //分析从服务器端返回的XML,去掉HTTP头信息,并且把XML转为PHP能识别的字符串
  37. $split = '<?xml version="1.0" encoding="iso-8859-1"?>';
  38. $xml = explode($split, $response);
  39. $xml = $split . array_pop($xml);
  40. $response = xmlrpc_decode($xml);
  41. //输出从RPC服务器端获取的信息
  42. print_r($response);
  43. ?>

server.php

  1. <?php 
  2. /**
  3.  * 函数:提供给RPC客户端调用的函数
  4.  * 参数:
  5.  * $method 客户端需要调用的函数
  6.  * $params 客户端需要调用的函数的参数数组
  7.  * 返回:返回指定调用结果
  8.  */
  9. function lifecycle($method, $params) { 
  10. /* $method = 'cycle', $params = (array of) request parameter(s); $data is also passed from xmlrpc_server_call_method, if we had any data to pass */ 
  11.     switch($params[0]) { 
  12.         case 'egg': 
  13.             $reply = 'All eggs will be birds one day.'; 
  14.         break; 
  15.         default: 
  16.             $reply = 'That must have been an otheregg'; 
  17.     } 
  18.     return $reply; 
  19. } 
  20. //产生一个XML-RPC的服务器端
  21. $server = xmlrpc_server_create(); 
  22. /* register the 'external' name and then the 'internal' name */ 
  23. xmlrpc_server_register_method($server, "cycle", "lifecycle"); 
  24. $request = $HTTP_RAW_POST_DATA; // no you don't need 'always on', and no $_POST doesn't work. 
  25. /* the parameters here are 'server, xml-string and user data'. There's supposed to be an optional 'output options' array too, but I can't get it working :( hence header() call */ 
  26. $response = xmlrpc_server_call_method($server, $request, null); 
  27. header('Content-Type: text/xml'); 
  28. print $response; 
  29. //销毁XML-RPC服务器端资源 
  30. xmlrpc_server_destroy($server); 
  31. ?>

运行输出:All eggs will be birds one day. 

 

 

客户端也可以用xmlrpc.inc

<?php   

include("lib/xmlrpc.inc");   

$GLOBALS['xmlrpc_internalencoding'] = 'UTF-8';  

$client = new xmlrpc_client("/server.php", "localhost", 80);    

$msg = new xmlrpcmsg('cycle',array(php_xmlrpc_encode("1"))); 

 

$res = $client->send($msg); 

$val = $res->value();

 

echo $val->scalarval();;

 

?>

分享到:
评论

相关推荐

    phpxmlrpc-3.0.0 程序库

    It is a library implementing the XML-RPC protocol, written in PHP. It is also known as PHPXMLRPC. It is designed for ease of use, flexibility and completeness. High speed and reduced memory footprint ...

    php XmlRPC 官方文档

    - **创建**: 可以通过静态方法 `xmlrpc_encode()` 创建一个新的 `xmlrpcval` 对象。 - **方法**: - `set_value()`: 设置值。 - `get_value()`: 获取当前存储的值。 - **xmlrpcmsg**: - **简介**: 代表 XML-RPC ...

    Laravel开发-laravel-naver-blog-xmlrpc

    composer require phpxmlrpc/phpxmlrpc ``` **3. 配置 API 授权** 在 Laravel 的 `.env` 文件中,配置你的 Naver 博客 API 密钥和用户名,例如: ``` NAVER_BLOG_API_KEY=your_api_key NAVER_BLOG_USERNAME=your_...

    php的xmlrpc详细讲解与实例

    PHP中集成了XML-RPC和SOAP两种协议的访问,都是集中在xmlrpc扩展当中。另外,在PHP的PEAR中,不管是PHP 4还是PHP 5,都已经默认集成了XML-RPC扩展,而且该扩展跟xmlrpc扩展无关,能够独立实现XML-RPC的协议交互,...

    xmlrpc实现php和后台c++的通信

    在这个场景中,我们关注的是如何利用XMLRPC实现在PHP和C++之间的通信。XMLRPC通过将方法调用和参数编码为XML消息,然后通过HTTP传递,服务器解码后执行相应操作并返回结果。 首先,我们需要了解XMLRPC的基本结构。...

    Laravel开发-laravel-naver-blog-xmlrpc .zip

    这个类会使用PHP的`xmlrpc`扩展或者第三方库如`phpxmlrpc`来处理XML-RPC请求和响应。你需要设置服务器URL、认证信息(如用户名和密码),然后调用相应的方法,传递必要的参数。 在项目结构上,你可能会在`app/...

    xmlrpc简单示例

    3. **跨语言**:XMLRPC支持多种编程语言,如Python、Java、PHP、Ruby等,可以方便地进行多语言开发环境的协作。 4. **轻量级**:相对于其他复杂的Web服务标准(如SOAP或REST),XMLRPC的实现更轻量,通信开销小。 ...

    ATT&CK手册.docx

    - PHPStudy2018:`PHPTutorial\php\php-5.2.17\ext\phpxmlrpc.dll` 和 `PHPTutorial\php\php-5.4.45\ext\php_xmlrpc.dll` **检测方法**:可以通过文本编辑器如Notepad++打开`phpxmlrpc.dll`文件,并搜索`@eval`...

    PHP_XMLRPC_Project.rar

    在PHP中,我们可以使用`xmlrpc_server_create()`创建一个XML-RPC服务器,然后使用`xmlrpc_server_register_method()`注册我们要提供的服务方法。例如: ```php $server = xmlrpc_server_create(); xmlrpc_server_...

    XMLRPC调用webservice

    `Zend`是一个PHP开发框架,其中包含了一个强大的XMLRPC扩展,可以方便地实现XMLRPC服务端和客户端的功能。在`Zend Framework`中,我们可以使用`Zend_XmlRpc_Server`创建服务端,定义处理函数;使用`Zend_XmlRpc_...

    xmlrpc类库

    XMLRPC(XML Remote Procedure Call)是一种基于HTTP协议的远程调用技术,它允许客户端...开发者可以通过XMLRPC库轻松地在各种编程语言中实现远程调用,如Python、PHP、Java、C++等,大大降低了跨语言通信的复杂性。

    xmlrpc-2.2.2

    PHP中的XMLRPC模块,如"xmlrpc-2.2.2",是实现这一协议的关键组件,使得PHP应用程序能够作为客户端或服务器端参与到XMLRPC通信中。 在PHP中,XMLRPC模块提供了以下核心功能: 1. **客户端支持**:通过XMLRPC客户端...

    supervisord-php:一个简单的用于 supervisord 的 PHP XML-RPC 客户端库

    用于简单 PHP XMLRPC 客户端 下载 git clone https://github.com/tyd/supervisord-php.git 基本用法 require_once 'supervisord-php/lib/Supervisord.php'; $s = new Supervisord('127.0.0.1', 9001, 'username',...

    php xml-rpc远程调用

    - 了解并使用合适的PHP XML-RPC库,例如phpxmlrpc或NuSOAP,它们提供了更完整的实现,并可能包括错误处理、数据类型转换等额外功能。 总之,PHP中的XML-RPC远程调用为我们提供了一种灵活、跨语言的远程过程调用方式...

    找不到php_mbstring.dll或php_exif.dll的解决方法

    ### 找不到php_mbstring.dll或php_exif.dll的解决方法 在开发环境中,当我们遇到类似于“无法加载动态库 php_mbstring.dll 或 php_exif.dll”这类错误时,通常意味着PHP扩展未能正确安装或者配置出现问题。本文将...

    Wordpress-XMLRPC-Brute-Force-Exploit:Wordpress XMLRPC系统多方调用蛮力利用(0天)by 1N3 @ C​​rowdShield

    1N3的Wordpress XMLRPC System Multicall蛮力利用漏洞,最近更新:20170215 关于: 这是对Wordpress xmlrpc.php系统多重调用功能的一种利用,影响了最新版本的Wordpress(3.5.1)。 该漏洞利用通过向xmlrpc.php发送...

    pfsense_xmlrpc_backdoor:通过 xmlrpc.php 在 pfSense 防火墙上放置 PHP 后门的简单示例

    快速介绍这是一个示例有效负载以及滥用 pfSense 的 xmlrpc.php 函数来建立后门并获得对 pfSense 防火墙的根级访问权限的示例。 这个漏洞是post-auth的(对于管理员账户),根据pfSense安全团队的说法,它被认为不是...

    rh-php71-php-xmlrpc-7.1.8-1.el7.x86_64.rpm

    官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装

    php-5.6.40-nts-Win32-VC11-x86.zip

    标题中的"php-5.6.40-nts-Win32-VC11-x86.zip"标识了一个特定版本的PHP运行环境,用于Windows 32位操作系统。"php5.6.40"表明这是PHP的5.6.40版本,这是一个稳定且广泛使用的版本。"nts"代表Non-thread-safe(非线程...

Global site tag (gtag.js) - Google Analytics