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就是为了异构系统的通信而产生的,它基本的思想就是使用基于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
- <?php
- /**
- * 函数:提供给RPC客户端调用的函数
- * 参数:
- * $method 客户端需要调用的函数
- * $params 客户端需要调用的函数的参数数组
- * 返回:返回指定调用结果
- */
- function rpc_server_func($method, $params) {
- $parameter = $params[0];
- if ($parameter == "get")
- {
- $return = "dikers".$params[0];
- }
- else
- {
- $return = "Not specify method or 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过来的XML数据
- $request = $HTTP_RAW_POST_DATA;
- //执行调用客户端的XML请求后获取执行结果
- $xmlrpc_response = xmlrpc_server_call_method($xmlrpc_server, $request, null);
- //把函数处理后的结果XML进行输出
- header("Content-Type: text/xml");
- echo $xmlrpc_response;
- //销毁XML-RPC服务器端资源
- xmlrpc_server_destroy($xmlrpc_server);
- ?>
- rpc_client.php
- <?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.0nUser_Agent: XML-RPC ClientnHost: ".$host."nContent-Type: text/XMLnContent-Length: ".strlen($request)."nn".$request."n";
- //把构造好的HTTP协议发送给服务器,失败返回false
- if (!fputs($fp, $query, strlen($query)))
- {
- $errstr = "Write error";
- return false;
- }
- //获取从服务器端返回的所有信息,包括HTTP头和XML信息
- $contents ="";
- while (!feof($fp))
- {
- $contents .= fgets($fp);
- }
- //关闭连接资源后返回获取的内容
- fclose($fp);
- //print_r($contents);
- return $contents;
- }
- //构造连接RPC服务器端的信息
- $host = "127.0.0.1";
- $port = 80;
- $rpc_server = "/sample/rpc_server.php";
- //http://127.0.0.1/sample/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);
- //分析从服务器端返回的XML,去掉HTTP头信息,并且把XML转为PHP能识别的字符串
- $split = '<?XML version="1.0" encoding="iso-8859-1"?>';
- $XML = explode($split, $response);
- $xml = $split.array_pop($XML);
- //print_r($xml);
- $response = xmlrpc_encode($xml);
- //输出从RPC服务器端获取的信息
- print_r($response);
- ?>
代码:
<?xml version="1.0" encoding="iso-8859-1"?>
<methodResponse>
<params>
<param>
<value>
<string>This data by get method</string>
</value>
</param>
</params>
</methodResponse>
[ 结束语 ]
不管是XML-RPC也好,SOAP也罢,只要能够让我们稳定、安全的进行远程过程的调用,完成我们的项目,那么就算整个Web
Service就是成功的。另外,如果可以的话,也可以尝试使用PEAR中的XML-RPC来实现上面类似的操作,说不定会更简单,更适合你使用。
简单的使用XML-RPC进行Web Service交互就完成了,部分代码参考PHP手册,想获取详细信息建议参考手册。
大致我们上面的例子就是提交一个叫做rpc_server的方法过去,参数是get,然后获取服务器端的返回,服务器端返回XML数据
webservice使用的更多相关文章
- webService
什么是webService WebService,顾名思义就是基于Web的服务.它使用Web(HTTP)方式,接收和响应外部系统的某种请求.从而实现远程调用. 1:从WebService的工作模式上 ...
- 开始webservice了
一.WebService到底是什么 一言以蔽之:WebService是一种跨编程语言和跨操作系统平台的远程调用技术. 所谓跨编程语言和跨操作平台,就是说服务端程序采用java编写,客户端程序则可以采用 ...
- Spring WebService入门
Web service是一个平台独立的,低耦合的,自包含的.基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言下的一个子集)标准来描述.发布.发现.协调和配置这些应用程序,用于开发分布 ...
- 浅谈跨域以及WebService对跨域的支持
跨域问题来源于JavaScript的同源策略,即只有 协议+主机名+端口号 (如存在)相同,则允许相互访问.也就是说JavaScript只能访问和操作自己域下的资源,不能访问和操作其他域下的资源. 在 ...
- 浅谈WebService的版本兼容性设计
在现在大型的项目或者软件开发中,一般都会有很多种终端, PC端比如Winform.WebForm,移动端,比如各种Native客户端(iOS, Android, WP),Html5等,我们要满足以上所 ...
- Atitit webservice发现机制 WS-Discovery标准的规范attilax总结
Atitit webservice发现机制 WS-Discovery标准的规范attilax总结 1.1. WS-Discovery标准1 1.2. 一.WS-Discovery1 1.2.1. ...
- java调用CXF WebService接口的两种方式
通过http://localhost:7002/card/services/HelloWorld?wsdl访问到xml如下,说明接口写对了. 2.静态调用 // 创建WebService客户端代理工厂 ...
- VS2010编写WebService与在IIS的发布<之简单讲解>
工具VS2010,window环境win7 一:Webservice的创建与方法查看调用 1.新建空web应用程序项目 2.新建web服务 3.自动生成 4.直接跑起来,可以看到有2个方法 5.点击H ...
- webService学习之路(三):springMVC集成CXF后调用已知的wsdl接口
webService学习之路一:讲解了通过传统方式怎么发布及调用webservice webService学习之路二:讲解了SpringMVC和CXF的集成及快速发布webservice 本篇文章将讲 ...
- webService学习之路(二):springMVC集成CXF快速发布webService
继上一篇webService入门之后,http://www.cnblogs.com/xiaochangwei/p/4969448.html ,现在我将我周六在家研究的结果公布出来 本次集成是基于之前已 ...
随机推荐
- gpart 分区工具
gpart 分区工具 https://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/disk-organization.html Table 3 ...
- 【刷题】HDU 4966 GGS-DDU
Problem Description Do you think this is a strange problem name? That is because you don't know its ...
- 解题:POI 2009 TAB
题面 这也算是个套路题(算吗)?发现换来换去每行每列数的组成是不变的,那么就把每行每列拎出来哈希一下,复杂度$O(Tn^2log$ $n)$有点卡时=.=. 然而正解似乎不需要哈希,就像这样↓ ;i& ...
- [DeeplearningAI笔记]卷积神经网络3.1-3.5目标定位/特征点检测/目标检测/滑动窗口的卷积神经网络实现/YOLO算法
4.3目标检测 觉得有用的话,欢迎一起讨论相互学习~Follow Me 3.1目标定位 对象定位localization和目标检测detection 判断图像中的对象是不是汽车--Image clas ...
- 教你破解MyEclipse到2016年【图文详解】
1.首先确定JDK以及环境变量没有问题.因为破解工具包里的run.bat是调用java命令执行jar包,如果环境变量没有配置好,那就运行不了了.2.解压破解包,双击[run.bat]打开破解界面: 3 ...
- HTML+CSS基础小笔记再整理
1. font的两个必须要写的:font-size 和 font-family text-indent 首行缩进(em)1em=一个文字大小 text-algin 对齐方式:left.center.r ...
- 使用RVM轻松部署Ruby环境
Ruby用得不多,但发现有业务需要部署指定的版本和插件.起初找了一些Fedora的src.rpm重新打包,发现依赖问题比较多,最终还是费劲的把el6的包编出来了. 不巧今天又有业务要求el5的包,原本 ...
- [Mac]一些命令技巧
Git相关 mac下git默认不区分大小写,通过下面脚本可以改变 #!/bin/bash # 让git区分大小写 cd 'path-of-project' git config core.ignore ...
- Angular测试遇到的小坑
Angular测试遇到的小坑 Error: Expected to be running in 'ProxyZone', but it was not found 检查doneFn的写法是否正确,位置 ...
- 【BZOJ】4596: [Shoi2016]黑暗前的幻想乡
[题意]给定n个点的无向完全图,有n-1个公司各自分管一部分路,要求所有公司都有修路的生成树数.n<=17. [算法]容斥原理+生成树计数(矩阵树定理) [题解]每个生成树方案是一个公司有无修路 ...