webservice使用

 

soap方法

一:PHP本身的SOAP
所有的webservice都包括服务端(server)和客户端(client)。
要使用php本身的soap首先要把该拓展安装好并且启用。下面看具体的code
首先这是服务端实现:

<?php   

class test   

{   

    function show() { return 'the data you request!'; } } function getUserInfo($name) { return 'fbbin'; } //实例化的参数手册上面有,这个是没有使用wsdl的,所以第一个参数为null,如果有使用wsdl,那么第一个参数就是这个wsdl文件的地址。 $server = new SoapServer(null, array('uri' ='http://soap/','location'='http://localhost/test/server.php')); $server->setClass('test'); //$server->addFunction('getUserInfo'); $server->handle(); ?> 

然后是客户端

复制代码 代码如下:

$soap = new SoapClient(null, array('location'='http://localhost/test/server.php','uri' ='http://soap/')); echo $soap->show(); //得到:'the data you request!' //echo $soap->getUserInfo('sss'); 

就这么简单,当时这只是一个很简单的例子,其实很多的通信机制都是这么去实现的!

PHP webService 技术一(使用XML-RPC)

[  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:phpextensions目录中,PHP5的扩展在C:phpext目录中),同时在
在apache 的安装目录下的php.ini中把extension=php_xmlrpc.dll前面的分号";"去掉,然后重
启Web服务器后查看phpinfo()有没有XML-RPC项目就能够确定是否已经正确安装xmlrpc扩展。
rpc_server.php
  1. <?php  
  2. /** 
  3. * 函数:提供给RPC客户端调用的函数 
  4. * 参数: 
  5. * $method 客户端需要调用的函数 
  6. * $params 客户端需要调用的函数的参数数组 
  7. * 返回:返回指定调用结果 
  8. */  
  9.   
  10. function rpc_server_func($method, $params) {  
  11. $parameter = $params[0];  
  12. if ($parameter == "get")  
  13. {   
  14. $return = "dikers".$params[0];   
  15. }  
  16. else  
  17. {  
  18. $return = "Not specify method or params";  
  19. }   
  20. return $return;   
  21. }   
  22. //产生一个XML-RPC的服务器端  
  23. $xmlrpc_server = XMLrpc_server_create();   
  24. //注册一个服务器端调用的方法rpc_server,实际指向的是rpc_server_func函数  
  25. xmlrpc_server_register_method($xmlrpc_server, "rpc_server", "rpc_server_func");   
  26. //接受客户端POST过来的XML数据  
  27. $request = $HTTP_RAW_POST_DATA;  
  28. //执行调用客户端的XML请求后获取执行结果  
  29. $xmlrpc_response = xmlrpc_server_call_method($xmlrpc_server, $request, null);   
  30. //把函数处理后的结果XML进行输出  
  31. header("Content-Type: text/xml");   
  32. echo $xmlrpc_response;   
  33. //销毁XML-RPC服务器端资源  
  34. xmlrpc_server_destroy($xmlrpc_server);   
  35. ?>  
  36. rpc_client.php  
  37. <?PHP  
  38. /** 
  39. * 函数:提供给客户端进行连接XML-RPC服务器端的函数 
  40. * 参数: 
  41. * $host 需要连接的主机 
  42. * $port 连接主机的端口 
  43. * $rpc_server XML-RPC服务器端文件 
  44. * $request 封装的XML请求信息 
  45. * 返回:连接成功成功返回由服务器端返回的XML信息,失败返回false 
  46. */  
  47. function rpc_client_call($host, $port, $rpc_server, $request) {   
  48. //打开指定的服务器端  
  49. $fp = fsockopen($host, $port);   
  50. //构造需要进行通信的XML-RPC服务器端的查询POST请求信息  
  51. $query = "POST $rpc_server HTTP/1.0nUser_Agent: XML-RPC ClientnHost: ".$host."nContent-Type: text/XMLnContent-Length: ".strlen($request)."nn".$request."n";   
  52. //把构造好的HTTP协议发送给服务器,失败返回false  
  53. if (!fputs($fp, $query, strlen($query)))   
  54. {   
  55. $errstr = "Write error";   
  56. return false;   
  57. }   
  58.   
  59. //获取从服务器端返回的所有信息,包括HTTP头和XML信息  
  60. $contents ="";   
  61. while (!feof($fp))  
  62. {   
  63. $contents .= fgets($fp);   
  64. }   
  65. //关闭连接资源后返回获取的内容  
  66. fclose($fp);   
  67. //print_r($contents);  
  68. return $contents;   
  69. }   
  70.   
  71. //构造连接RPC服务器端的信息  
  72. $host = "127.0.0.1";   
  73. $port = 80;   
  74. $rpc_server = "/sample/rpc_server.php";  
  75. //http://127.0.0.1/sample/rpc_server.php  
  76. //把需要发送的XML请求进行编码成XML,需要调用的方法是rpc_server,参数是get  
  77. $request = XMLrpc_encode_request("rpc_server", "get");   
  78.   
  79. //调用rpc_client_call函数把所有请求发送给XML-RPC服务器端后获取信息  
  80. $response = rpc_client_call($host, $port, $rpc_server, $request);   
  81. //分析从服务器端返回的XML,去掉HTTP头信息,并且把XML转为PHP能识别的字符串  
  82. $split = '<?XML version="1.0" encoding="iso-8859-1"?>';  
  83. $XML = explode($split, $response);  
  84. $xml = $split.array_pop($XML);  
  85. //print_r($xml);  
  86. $response = xmlrpc_encode($xml);  
  87. //输出从RPC服务器端获取的信息  
  88. print_r($response);  
  89. ?>  
 
复制内容到剪贴板
代码:
<?xml version="1.0" encoding="iso-8859-1"?>
<methodResponse>
<params>
<param>
  <value>
   <string>This data by get method</string>
  </value>
</param>
</params>
</methodResponse>
那么我们再通过xmlrpc_decode, simplexml_load_string等函数把这个XML编码为PHP的字符串,我们就能够随意处理了,整个Web Service交互完成。

[  结束语 ]
不管是XML-RPC也好,SOAP也罢,只要能够让我们稳定、安全的进行远程过程的调用,完成我们的项目,那么就算整个Web Service就是成功的。另外,如果可以的话,也可以尝试使用PEAR中的XML-RPC来实现上面类似的操作,说不定会更简单,更适合你使用。
简单的使用XML-RPC进行Web Service交互就完成了,部分代码参考PHP手册,想获取详细信息建议参考手册。
大致我们上面的例子就是提交一个叫做rpc_server的方法过去,参数是get,然后获取服务器端的返回,服务器端返回XML数据
 
 
 

soap方法

一:PHP本身的SOAP
所有的webservice都包括服务端(server)和客户端(client)。
要使用php本身的soap首先要把该拓展安装好并且启用。下面看具体的code
首先这是服务端实现:

<?php   

class test   

{   

    function show() { return 'the data you request!'; } } function getUserInfo($name) { return 'fbbin'; } //实例化的参数手册上面有,这个是没有使用wsdl的,所以第一个参数为null,如果有使用wsdl,那么第一个参数就是这个wsdl文件的地址。 $server = new SoapServer(null, array('uri' ='http://soap/','location'='http://localhost/test/server.php')); $server->setClass('test'); //$server->addFunction('getUserInfo'); $server->handle(); ?> 

然后是客户端

复制代码 代码如下:

$soap = new SoapClient(null, array('location'='http://localhost/test/server.php','uri' ='http://soap/')); echo $soap->show(); //得到:'the data you request!' //echo $soap->getUserInfo('sss'); 

就这么简单,当时这只是一个很简单的例子,其实很多的通信机制都是这么去实现的!

PHP webService 技术一(使用XML-RPC)

[  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:phpextensions目录中,PHP5的扩展在C:phpext目录中),同时在
在apache 的安装目录下的php.ini中把extension=php_xmlrpc.dll前面的分号";"去掉,然后重
启Web服务器后查看phpinfo()有没有XML-RPC项目就能够确定是否已经正确安装xmlrpc扩展。
rpc_server.php
  1. <?php  
  2. /** 
  3. * 函数:提供给RPC客户端调用的函数 
  4. * 参数: 
  5. * $method 客户端需要调用的函数 
  6. * $params 客户端需要调用的函数的参数数组 
  7. * 返回:返回指定调用结果 
  8. */  
  9.   
  10. function rpc_server_func($method, $params) {  
  11. $parameter = $params[0];  
  12. if ($parameter == "get")  
  13. {   
  14. $return = "dikers".$params[0];   
  15. }  
  16. else  
  17. {  
  18. $return = "Not specify method or params";  
  19. }   
  20. return $return;   
  21. }   
  22. //产生一个XML-RPC的服务器端  
  23. $xmlrpc_server = XMLrpc_server_create();   
  24. //注册一个服务器端调用的方法rpc_server,实际指向的是rpc_server_func函数  
  25. xmlrpc_server_register_method($xmlrpc_server, "rpc_server", "rpc_server_func");   
  26. //接受客户端POST过来的XML数据  
  27. $request = $HTTP_RAW_POST_DATA;  
  28. //执行调用客户端的XML请求后获取执行结果  
  29. $xmlrpc_response = xmlrpc_server_call_method($xmlrpc_server, $request, null);   
  30. //把函数处理后的结果XML进行输出  
  31. header("Content-Type: text/xml");   
  32. echo $xmlrpc_response;   
  33. //销毁XML-RPC服务器端资源  
  34. xmlrpc_server_destroy($xmlrpc_server);   
  35. ?>  
  36. rpc_client.php  
  37. <?PHP  
  38. /** 
  39. * 函数:提供给客户端进行连接XML-RPC服务器端的函数 
  40. * 参数: 
  41. * $host 需要连接的主机 
  42. * $port 连接主机的端口 
  43. * $rpc_server XML-RPC服务器端文件 
  44. * $request 封装的XML请求信息 
  45. * 返回:连接成功成功返回由服务器端返回的XML信息,失败返回false 
  46. */  
  47. function rpc_client_call($host, $port, $rpc_server, $request) {   
  48. //打开指定的服务器端  
  49. $fp = fsockopen($host, $port);   
  50. //构造需要进行通信的XML-RPC服务器端的查询POST请求信息  
  51. $query = "POST $rpc_server HTTP/1.0nUser_Agent: XML-RPC ClientnHost: ".$host."nContent-Type: text/XMLnContent-Length: ".strlen($request)."nn".$request."n";   
  52. //把构造好的HTTP协议发送给服务器,失败返回false  
  53. if (!fputs($fp, $query, strlen($query)))   
  54. {   
  55. $errstr = "Write error";   
  56. return false;   
  57. }   
  58.   
  59. //获取从服务器端返回的所有信息,包括HTTP头和XML信息  
  60. $contents ="";   
  61. while (!feof($fp))  
  62. {   
  63. $contents .= fgets($fp);   
  64. }   
  65. //关闭连接资源后返回获取的内容  
  66. fclose($fp);   
  67. //print_r($contents);  
  68. return $contents;   
  69. }   
  70.   
  71. //构造连接RPC服务器端的信息  
  72. $host = "127.0.0.1";   
  73. $port = 80;   
  74. $rpc_server = "/sample/rpc_server.php";  
  75. //http://127.0.0.1/sample/rpc_server.php  
  76. //把需要发送的XML请求进行编码成XML,需要调用的方法是rpc_server,参数是get  
  77. $request = XMLrpc_encode_request("rpc_server", "get");   
  78.   
  79. //调用rpc_client_call函数把所有请求发送给XML-RPC服务器端后获取信息  
  80. $response = rpc_client_call($host, $port, $rpc_server, $request);   
  81. //分析从服务器端返回的XML,去掉HTTP头信息,并且把XML转为PHP能识别的字符串  
  82. $split = '<?XML version="1.0" encoding="iso-8859-1"?>';  
  83. $XML = explode($split, $response);  
  84. $xml = $split.array_pop($XML);  
  85. //print_r($xml);  
  86. $response = xmlrpc_encode($xml);  
  87. //输出从RPC服务器端获取的信息  
  88. print_r($response);  
  89. ?>  
 
复制内容到剪贴板
代码:
<?xml version="1.0" encoding="iso-8859-1"?>
<methodResponse>
<params>
<param>
  <value>
   <string>This data by get method</string>
  </value>
</param>
</params>
</methodResponse>
那么我们再通过xmlrpc_decode, simplexml_load_string等函数把这个XML编码为PHP的字符串,我们就能够随意处理了,整个Web Service交互完成。

[  结束语 ]
不管是XML-RPC也好,SOAP也罢,只要能够让我们稳定、安全的进行远程过程的调用,完成我们的项目,那么就算整个Web Service就是成功的。另外,如果可以的话,也可以尝试使用PEAR中的XML-RPC来实现上面类似的操作,说不定会更简单,更适合你使用。
简单的使用XML-RPC进行Web Service交互就完成了,部分代码参考PHP手册,想获取详细信息建议参考手册。
大致我们上面的例子就是提交一个叫做rpc_server的方法过去,参数是get,然后获取服务器端的返回,服务器端返回XML数据

猜你喜欢

转载自www.cnblogs.com/myJuly/p/10007156.html