18842388900

网站建设 APP开发 小程序

Article/文章

记录成长点滴 分享您我感悟

您当前位置>首页 > 知识 > 网站建设

简单介绍在PHP中使用XML-RPC构建Web服务

目前有两种用于Web服务通信的协议标准,一种是XML-RPC,另一种是SOAP。 XML-RPC相对简单,更早发生,SOAP更复杂,主要是当它需要稳定,健壮,安全和复杂时。

XML中的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扩展

如果您的系统上没有安装phprpc的php扩展,请正确安装。

在Windows平台上,首先将PHP安装目录中的扩展名php_xmlrpc.dll放到C: \ Windows或C: \ Winnt目录中,(C: \ php \ extensions目录中的PHP4扩展名,C: \ php \ ext中的PHP5扩展名)目录),同时在C: \ Windows \ php.ini或C: \ Winnt \ php.ini中,删除分号';'在扩展名=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=''此数据通过get方法''; } else {$ return=''未指定Method或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 $ request=$ HTTP_RAW_POST_DATA;

的XML数据

//执行XML请求到客户端获取执行结果$ xmlrpc_response=xmlrpc_server_call_method($ xmlrpc_server,$ request,null);

//输出函数头处理的结果XML(''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协议发送到服务器,无法返回falseif(!fputs($ fp,$ query,strlen($ query))){$ errstr='Write error'; return false;} //获取slave服务器终端返回的所有信息,包括HTTP头和XML信息$ contents=''''; while(!feof($ fp)){$ contents。=fgets($ fp);}

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

//构造连接到RPC服务器的信息$ host=''localhost''; $ port=80; $ rpc_server=''/〜heiyeluren/rrpc_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=$拆分。 array_pop($ xml); $ response=xmlrpc_decode($ xml);

//输出从RPC服务器print_r($ response);

获得的信息

?>

上面我们的例子大致是提交一个名为rpc_server的方法,参数是get,然后得到服务器端返回,服务器返回的XML数据是:<xml>这个数据由get方法

然后我们可以通过xmlrpc_decode函数将这个XML编码为PHP字符串,我们可以随意处理它,并完成整个Web服务交互。

网站建设,小程序开发,小程序制作,微信小程序开发,公众号开发,微信公众号开发,网页设计,网站优化,网站排名,网站设计,微信小程序设计,小程序定制,微信小程序定制

相关案例查看更多