SOAP已经是属于OUT范畴的技术了,不过因为历史原因,时不时还是会用到它,以前都是用NuSOAP,现在准备试试PHP内置的SOAP扩展。由于文本只打算说说客户端的用法,所以得先找一些能直接用的服务端,Xmethods提供了一些有趣的选择,这里选择其中的服务,功能很简单,就是提供一个IP地址,然后返回国家名称。

先创建一个client实例:

$client = new SoapClient('http://www.ecubicle.net/iptocountry.asmx?wsdl', array('trace' => true));

通过设置trace为true,我们可以在稍后使用 __getLastRequest,__getLastRequestHeaders,__getLastResponse,__getLastResponseHeaders 等方法得到一些信息,在程序调试阶段,这些信息很有用,程序投入使用时,则不必使用此参数。除了trace参数,还可以设定login和password 参数以实现HTTP认证的功能,此外还有很多参数,可以参考官方文档。

创建了前面的$client实例后,我们可以先看看服务都提供了哪些方法:

print_r($client->__getFunctions());

服务方法的信息细节可以从wsdl里自己查阅,下面看看怎么调用一个实际的方法,$ip='64.156.132.140':

$result = $client->__soapCall('FindCountryAsString', array('FindCountryAsString' => array('V4IPAddress' => $ip)));
print_r($result->FindCountryAsStringResult);

还可以这样调用:

$result = $client->FindCountryAsString(array('V4IPAddress' => $ip));
print_r($result->FindCountryAsStringResult);

还可以这样调用:

$params = new SoapParam(array('V4IPAddress' => $ip), 'FindCountryAsStringSoapIn');
$result = $client->__soapCall('FindCountryAsString', array($params));
print_r($result->FindCountryAsStringResult);

还可以这样调用:

$params = new SoapParam(array('V4IPAddress' => $ip), 'FindCountryAsStringSoapIn');
$result = $client->FindCountryAsString($params);
print_r($result->FindCountryAsStringResult);

在使用SOAP时,参数如何传递有点不好说明,这需要研读wsdl描述文档,不过看wsdl实在是一件无趣的事情,所以我觉得你可以先大概看一下 wsdl,然后凭感觉去尝试传递参数,其中配合trace调试,一般来说,试几次就能找到正确的传递方式,如果还不行,再通过 __getLastRequest,__getLastRequestHeaders等方法提供的信息配合wsdl描述文档仔细研究。

附一个很不错的SOAP测试工具:SOAPUI。

PHP内置SOAP扩展客户端的使用例子的更多相关文章

  1. Django内置权限扩展案例

    当Django的内置权限无法满足需求的时候就自己扩展吧~ 背景介绍 overmind项目使用了Django内置的权限系统,Django内置权限系统基于model层做控制,新的model创建后会默认新建 ...

  2. 框架(yii和thinkphp)中实例化php内置或者扩展中的对象问题

    将php原生语句实例化SphinxClient对象移植到yii2框架中报错 原生语句中这样写: $s = new SphinxClient(); 框架中应该加入反斜杠,这样写: $s = new \S ...

  3. PHP如何添加内置的扩展

    什么时候server上PHP已安装.需要额外补充PHP如何扩展?你并不需要再次安装PHP.同phpize我们可以在原PHP安装扩展直接的基础上,. 这次编译只不过单独编译PHP的扩展库.接下来将编译好 ...

  4. 如何启用内置的Win10 OpenSSH客户端(转)

    如何启用内置的Win10 OpenSSH客户端 关注Windows10,锁定Win10之家(http://www.ghost580.com/windows10/) 如何启用内置的Win10 OpenS ...

  5. JS高级——扩展内置对象的方法

    基本概念 内置对象有很多,几个比较重要的:Math.String.Date.Array 基本使用 1.内置对象创建出来的对象使用的方法使用的其实都是内置对象的原型对象中的方法 (1)a并没有charA ...

  6. ES6新增语法和内置对象(let,const, Array/String/Set 扩展方法(解构赋值,箭头函数,剩余参数))

    1.let ES6中新增的用于声明变量的关键字. let 声明的变量只在所处于的块级有效. 注意:使用 let 关键字声明的变量才具有块级作用域,var 关键字是不具备这个特点的. 1. 防止循环变量 ...

  7. asp.net内置对象session和cookie

    1.各个机器的session对象不同,不同浏览器之间不通用(换个浏览器,是个新的session). 2.session状态对象起始于网页打开,终止于网页关闭,生命周期有限. 3.关闭浏览器/超时的情况 ...

  8. Django内置分页

    一.django内置分页 from django.shortcuts import render from django.core.paginator import Paginator, EmptyP ...

  9. request内置对象

    request内置对象(JSP九大内置对象之一)简述:内置对象即已在容器内部创建完成,可以直接调用的对象.容器在接收到客户端的请求后会创建一个对象用于处理请求信息,该对象就是内置对象(属于“javax ...

随机推荐

  1. 网络教程(12) TCP协议

    IP协议的限制 IP协议需要 datalink帧来包装它 Ethernet或者PPP 一般都有1500byte字节或者大小的限制 可能会出现的问题 Packet loss – retransmit R ...

  2. JavaScript正则表达式总结

    同学们,今天给大家带来一篇正则表达式的总结,老规矩,先说下我们为什么要用正则?正则要用在什么地方? (个人理解的,大神轻喷) 正则很多时候要用于字符串操作,比如我们要把一个字符串里面的空格删除啊,替换 ...

  3. [luogu 1270] “访问”美术馆 (树形dp)

    传送门 Description 经过数月的精心准备,Peer Brelstet,一个出了名的盗画者,准备开始他的下一个行动.艺术馆的结构,每条走廊要么分叉为两条走廊,要么通向一个展览室.Peer知道每 ...

  4. [SPOJ1716] GSS3 - Can you answer these queries III

    线段树操作. 维护一个区间最大连续子段和,左最大连续子段和,右最大连续子段和即可. 最后不知道怎么搞,query的时候返回了个结构体. #include <cstdio> #include ...

  5. linux 遇到(vsftpd)—500 OOPS:chroot

    今天在用vsftpd 时出现一个问题: 500 OOPS:chroot 解决办法: 1.关闭SELINUX [root@localhost ~]#vi /etc/sysconfig/selinux # ...

  6. java 比较两个时间大小

    Date d1 = new Date(System.currentTimeMillis()-1000); Date d2 = new Date(System.currentTimeMillis()); ...

  7. 【XSY2384】【GDOI2017】微信

    致去年的我:这是道广义SAM模板题啊…… 题意: Description Input Output HINT $1\leq N\leq 20$,$1\leq Q\leq 10^5$,字符串总长$\le ...

  8. 关于sql连接查询(内联、左联、右联、全联)

    内连接(INNER JOIN)(典型的连接运算,使用像   =   或   <>   之类的比较运算符).包括相等连接和自然连接. 内连接使用比较运算符根据每个表共有的列的值匹配两个表中的 ...

  9. oracle 解除锁表sql

    select b.owner,b.object_name,a.session_id,a.locked_mode from v$locked_object a,dba_objects b where b ...

  10. Java进化? Kotlin初探与集成Android项目

    欢迎Follow我的GitHub, 关注我的CSDN. Kotlin是基于JVM的编程语言, 由JetBrains公司开发, 眼下已经开源. IntelliJ IDEA, PyCharm, Andro ...