zoukankan      html  css  js  c++  java
  • 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数据
     
     
     
  • 相关阅读:
    Leetcode: Increasing Triplet Subsequence
    Snapchat面经(师兄的)
    M面经prepare: Shuffle a deck
    M面经Prepare: Find integer Average of 2 integers.
    M面经Prepare: Positive-Negative partitioning preserving order
    M面经Prepare: Delete Words Starting With One Character
    Lintcode: Subtree
    Leetcode: Reconstruct Itinerary
    Groupon面经:Find paths in a binary tree summing to a target value
    一些小感悟(2014.04版)
  • 原文地址:https://www.cnblogs.com/myJuly/p/10007156.html
Copyright © 2011-2022 走看看