PHP_XmlRpc简单实现;
来源:互联网 发布:淘宝教育网视频看不了 编辑:程序博客网 时间:2024/05/16 13:57
> rpc_server.php 文件
<span style="font-size:18px;"><?php/** * PHP XmlRpc_服务端 * 2WorkRoom3 * 谨记:需要开启extension=php_xmlrpc.dll扩展; *//** * 日志:写入log.txt文件日志; * @param $str 日志具体信息; */function fLog($str){ // 注意:\r\n要用双引号引起来才起作用,而单引号不起作用; //file_put_contents('log.txt', '---'.date('Y-m-d_H:i:s')."---\r\n", FILE_APPEND); //file_put_contents('log.txt', $str."\r\n\r\n", FILE_APPEND);}/*** rpc_server_func 函数* 函数:提供给RPC客户端调用的函数(通过注册)* 参数:* $method 客户端需要调用的函数(方法名,注册为这个函数的方法名);* $params 客户端需要调用的函数的参数数组;* 返回:返回指定调用结果;*/function rpc_server_func($method, $params) { fLog('$method='.$method); $parameter = $params[0]; if ($parameter == "get") { // 返回给客户端的信息 //$return = "This data by get method."; $jsondata = '{"id":"23", "name":"2WorkRoom3"}'; $return = $jsondata; } else { $return = "Not specify method or params."; } return $return; } // 1、创建服务器端$xmlrpc_server = xmlrpc_server_create(); // 2、注册服务方法// 注册一个服务器端调用的方法'rpc_server',实际指向的是rpc_server_func函数xmlrpc_server_register_method($xmlrpc_server, "rpc_server", "rpc_server_func"); // 接受客户端POST过来的XML数据$request = $HTTP_RAW_POST_DATA;fLog("HTTP_RAW_POST_DATA=$HTTP_RAW_POST_DATA");/* $request 内容 <?xml version="1.0" encoding="iso-8859-1"?> <methodCall> <methodName>rpc_server</methodName> <params> <param> <value> <string>get</string> </value> </param> </params> </methodCall> */// 3、调用请求方法// 执行调用 客户端的XML请求后获取执行结果$xmlrpc_response = xmlrpc_server_call_method($xmlrpc_server, $request, null); // 4、返回结果信息// 把函数处理后的结果XML进行输出header("Content-Type: text/xml"); // 以xml格式返回;echo $xmlrpc_response;fLog("xmlrpc_response=$xmlrpc_response");/* xmlrpc_response 内容<?xml version="1.0" encoding="iso-8859-1"?><methodResponse><params> <param> <value> <string>This data by get method.</string> </value> </param></params></methodResponse>*/// 5、销毁服务资源xmlrpc_server_destroy($xmlrpc_server); ?></span>
>rpc_client.php 文件
<span style="font-size:18px;"><?php/** * PHP XmlRpc_客户端 * 2WorkRoom3 * 谨记:需要开启extension=php_xmlrpc.dll扩展; *//** * 日志:写入log.txt文件日志; * @param $str 日志具体信息; */function fLog($str){ // 注意:\r\n要用双引号引起来才起作用,而单引号不起作用; //file_put_contents('log.txt', '---'.date('Y-m-d_H:i:s')."---\r\n", FILE_APPEND); //file_put_contents('log.txt', $str."\r\n\r\n", FILE_APPEND);}/** * rpc_client_call函数 * 函数:提供给客户端进行连接XML-RPC服务器端的函数 * 参数: * $host 需要连接的主机 * $port 连接主机的端口 * $rpc_server XML-RPC服务器端文件 * $request 封装的XML请求信息 * 返回:连接成功,成功返回由服务器端返回的XML信息,失败返回false; */function rpc_client_call($host, $port, $rpc_server, $request) { // 1、打开网络连接 // 打开指定的服务器端 $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"; // 2、发送请求信息 // 把构造好的HTTP协议发送给服务器,失败返回false if (!fputs($fp, $query, strlen($query))){ $errstr = "Write error"; return false; } // 3、接受返回信息 // 获取从服务器端返回的所有信息,包括HTTP头和XML信息 $contents = ""; while (!feof($fp)) { $contents .= fgets($fp); } // 4、关闭网络连接 // 关闭连接资源后返回获取的内容 fclose($fp); fLog("contents=$contents"); /* $contents 信息 HTTP/1.1 200 OK Date: Sun, 29 Nov 2015 11:36:59 GMT Server: Apache/2.4.7 (Win32) OpenSSL/1.0.1e PHP/5.5.9 X-Powered-By: PHP/5.5.9 Content-Length: 183 Connection: close Content-Type: text/xml <?xml version="1.0" encoding="iso-8859-1"?> <methodResponse> <params> <param> <value> <string>This data by get method.</string> </value> </param> </params> </methodResponse> */ return $contents;}/// 服务信息: 构造连接RPC服务器端的信息;$host = "tiytest.com";$port = 80;/// 请求文件:RPC服务器端文件路径;$rpc_server = "/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);fLog("response=$response");/// 解析结果// 分析从服务器端返回的XML,去掉HTTP头信息,并且把XML转为PHP能识别的字符串.// 这部分在不同的xml返回中,不尽相同,要察看后再填写分隔符。//$split = 'Content-Type: text/xml';$split = "\r\n"; // 报头信息与响应实体有空行,用\r\n表示,记得用双引号引起来,单引号不起作用,以字符串输出;$xml = explode($split, $response);$xml = trim(array_pop($xml));$responsexml = xmlrpc_decode($xml);// 输出从RPC服务器端获取的信息print_r($responsexml);?></span>
0 0
- PHP_XmlRpc简单实现;
- 杀毒软件的简单实现的简单实现
- 杀毒软件的简单实现
- AXIS简单实现入门
- 俄罗斯方块的简单实现
- 简单文件系统的实现
- GinaBackDoor简单实现
- 杀毒软件的简单实现
- 杀毒软件的简单实现
- 实现简单有限状态机
- 实现简单下载代码
- 简单实现全屏对话框
- 迷宫程序简单实现
- 简单HTTP服务器实现
- strstr()的简单实现
- printf 的简单实现
- URL编码简单实现
- frame简单实现导航
- hdoj 5573 Binary Tree 【思维】
- python module
- hpuoj--校赛--2015年的第一场雪(暴力)
- 俄罗斯和土耳其
- 关于字符串的倒置
- PHP_XmlRpc简单实现;
- 黑马程序员——javaSE_反射
- Android 进阶 Fragment 介绍和使用 (二)
- 南大软院大神养成计划--第十三天活动
- 10行代码搞定PHP页面静态化(10 lines of code to get PHP static pages)
- 10-01 到 11-29的项目总结
- 《leetCode》:Simplify Path
- [Sort]希尔排序
- Trie树及其应用