SOAP是基于XML和HTTP通信协议,xml各种平台,各种语言都支持的一个种语言。http呢它得到了所有的因特网浏览器及服务器的支持。

WSDL 指网络服务描述语言 (Web Services Description Language),是一种使用 XML 编写的文档。这种文档可描述某个 Web service。它可规定服务的位置,以及此服务提供的操作。

我是做php的,你是java的,他是做.net,如果我们三个之间要进行通信,要进行数据交换,怎么办呢?我们需要一个能和我们都能通信的工具。soap,wsdl被创造出来,使得运行在不同的操作系统并使用不同的技术和编程语言的应用程序可以互相进行通信。

如果php要使用soap的话,通常做法是,添加了一下php的soap模块,在php.ini里面加上soap.so,下面介绍一个不要添加soap.so文件,也可以实现soap的方法

nusoap是php写的一个功能文件,包涵进来就可以用了,网上很多自己去搜一下吧。

1,不使用wsd

a,服务端helloworld2.php

查看复制打印?
  1. <?php
  2. //包函nusoap.php
  3. require_once('./lib/nusoap.php');
  4. //创建服务端
  5. $server = new soap_server;
  6. //定义客户端调用方法
  7. $server->register('hello');
  8. //调用方法以及参数
  9. function hello($name) {
  10. return 'Hello, ' . $name;
  11. }
  12. $HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : '';
  13. $server->service($HTTP_RAW_POST_DATA);
  14. ?>

b,客户端hello.php

查看复制打印?
  1. <?php
  2. //包函nusoap.php
  3. require_once('./lib/nusoap.php');
  4. //新建一个soap客户端,调用服务端提供的wsdl
  5. //$client = new soapclient('http://localhost/test/hellowsdl2.php?wsdl', true);
  6. $client = new soapclient('http://localhost/test/helloworld2.php');
  7. //查看一下是不是报错
  8. $err = $client->getError();
  9. if ($err) {
  10. //显示错误
  11. echo '<h2>Constructor error</h2><pre>' . $err . '</pre>';
  12. }
  13. //调用服务端的方法
  14. $result = $client->call('hello', array('person' => "this is a test"));
  15. echo '<h2>Result</h2><pre>';
  16. print_r($result);
  17. echo '</pre>';
  18. ?>

2,使用wsld

a,服务器端

查看复制打印?
  1. <?php
  2. //包函nusoap.php
  3. require_once('./lib/nusoap.php');
  4. //新建一个soap服务
  5. $server = new soap_server();
  6. //初始化支持wsdl
  7. $server->configureWSDL('hellowsdl2', 'urn:hellowsdl2');
  8. //定义数据结构来接收数据
  9. $server->wsdl->addComplexType(
  10. 'Person',
  11. 'complexType',
  12. 'struct',
  13. 'all',
  14. '',
  15. array(
  16. 'firstname' => array('name' => 'firstname', 'type' => 'xsd:string'),//后面的type定义数据的类型,这个是string
  17. 'age' => array('name' => 'age', 'type' => 'xsd:int'),//后面的type定义数据的类型,这个是int
  18. 'gender' => array('name' => 'gender', 'type' => 'xsd:string')//后面的type定义数据的类型,这个是string
  19. )
  20. );
  21. $server->wsdl->addComplexType(
  22. 'SweepstakesGreeting',
  23. 'complexType',
  24. 'struct',
  25. 'all',
  26. '',
  27. array(
  28. 'greeting' => array('name' => 'greeting', 'type' => 'xsd:string'),
  29. 'winner' => array('name' => 'winner', 'type' => 'xsd:string')
  30. )
  31. );
  32. //服务器定义的soap调用方法
  33. $server->register('hello',                    // 方法名字hello,方法就在下面
  34. array('person' => 'tns:Person'),          // 客户端传来的变量
  35. array('return' => 'tns:SweepstakesGreeting'),    //返回参数
  36. 'urn:hellowsdl2',                         // soap名
  37. 'urn:hellowsdl2#hello',                   // soap的方法名
  38. 'rpc',                                    // 使用的方式
  39. 'encoded',                                // 编码
  40. 'test'                                    // 存档
  41. );
  42. //定义上面注册过的函数hello
  43. function hello($person) {
  44. $greeting = 'Hello, ' . $person['firstname'] .
  45. '. It is nice to meet a ' . $person['age'] .
  46. ' year old ' . $person['gender'] . '.';
  47. $winner =  'Scott';
  48. //要返回的数据
  49. return array(
  50. 'greeting' => $greeting,
  51. 'winner' => $winner
  52. );
  53. }
  54. // 请求时(试图)调用服务
  55. $HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : '';
  56. $server->service($HTTP_RAW_POST_DATA);
  57. ?>

b,客户端

查看复制打印?
  1. <?php
  2. //包函nusoap.php
  3. require_once('./lib/nusoap.php');
  4. //新建一个soap客户端,调用服务端提供的wsdl
  5. //$client = new soapclient('http://localhost/test/hellowsdl2.php?wsdl', true);
  6. $client = new soapclient('http://localhost/test/helloworld2.php');
  7. //查看一下是不是报错
  8. $err = $client->getError();
  9. if ($err) {
  10. //显示错误
  11. echo '<h2>Constructor error</h2><pre>' . $err . '</pre>';
  12. }
  13. //要向服务端要传的参数
  14. $person = array('firstname' => 'Willi', 'age' => 22, 'gender' => 'male');
  15. //调用服务端的方法
  16. $result = $client->call('hello', array('person' => $person));
  17. //错误审核
  18. if ($client->fault) {
  19. echo '<h2>Fault</h2><pre>';
  20. print_r($result);
  21. echo '</pre>';
  22. } else {
  23. $err = $client->getError();
  24. if ($err) {
  25. echo '<h2>Error</h2><pre>' . $err . '</pre>';
  26. } else {
  27. echo '<h2>Result</h2><pre>';
  28. print_r($result);
  29. echo '</pre>';
  30. }
  31. }
  32. //显示请求信息
  33. echo '<h2>Request</h2>';
  34. echo '<pre>' . htmlspecialchars($client->request, ENT_QUOTES) . '</pre>';
  35. //显示返回信息
  36. echo '<h2>Response</h2>';
  37. echo '<pre>' . htmlspecialchars($client->response, ENT_QUOTES) . '</pre>';
  38. //显示调试信息
  39. echo '<h2>Debug</h2>';
  40. echo '<pre>' . htmlspecialchars($client->debug_str, ENT_QUOTES) . '</pre>';
  41. ?>

soapclient相关推荐

  1. php调用webservice报错Class 'SoapClient' not found

    php调用webservice报错Class 'SoapClient' not found 原文:php调用webservice报错Class 'SoapClient' not found php在调 ...

  2. thinkphp 调用wsdl接口实例化SoapClient抛出异常

    thinkphp 调用wsdl接口实例化SoapClient抛出异常 参考文章: (1)thinkphp 调用wsdl接口实例化SoapClient抛出异常 (2)https://www.cnblog ...

  3. PHP Class SoapClient not found解决方法

    要用到 SoapClient, new 了一个提示 Class 'SoapClient' not found, 检查了下 phpinfo, 原因是当初没有编译这个扩展, 只好现在再加上了. php在调 ...

  4. php中soap使用,SoapServer服务端编写,SoapClient客户端编写

    以前没接触过soap,最近要弄了,花了一天时间整理,学习了一下,转载请注明http://blog.csdn.net/nanshan_hzq/article/details/52814622 一,首先要 ...

  5. 从一道题学习SoapClient与CRLF组合拳

    文章目录 一份更详细的WP 前言 CRLF注入攻击 本题需要重点关注的析构函数 SoapCLient+CRLF 代码审计 参考文章 一份更详细的WP 太懒了直接放百度云 链接:https://pan. ...

  6. php soapclient 异常,一个请求后,PHP SoapClient失败

    我有一个使用SoapClient访问API的 PHP脚本.连接后,如果我只发出一个请求,它按预期工作,但当我尝试使用相同的SoapClient对象发出第二个请求时,我收到错误请求错误. 我相信这个问题 ...

  7. php soapclient 异常,PHP SoapClient:SoapFault异常无法连接到主机

    我只想在这个步骤中添加一个可能有用的提示 . 它应该检查的东西除了已经写在这里的其他有用的答案 . 如果从PHP 5.5或更早版本升级到PHP 5.6或PHP7,您可能会看到此错误 . 在较新版本的P ...

  8. php domdocument soap,在PHP中使用SoapClient从WSDL获取元素

    用常规的SoapClient不可能做你想要的.你最好的办法是扩展SoapClient类并抽出这个要求来获取版本. 请注意,file_get_contents没有被缓存,所以它将始终加载WSDL文件.另 ...

  9. php的SOAP-CLIENT详解

    一.概述 SOAP有大体两种模式WSDL模式和non-WSDL模式.WSDL模式访问的url中带有?wsdl,SoapClient在实例化的时候需要传入第一个参数. 无论是何种模式,方法的参数结构都需 ...

  10. php soap 手册,SoapClient::SoapClient

    用户评论: [#1] omidkosari at yahoo dot com [2015-06-25 16:05:18] To solve the problem with a lot of FIN_ ...

最新文章

  1. 经验 | 秋招总结(拼多多,腾讯,百度,字节)
  2. a challengefor the 2 hour course
  3. golang+数据库定时任务
  4. 《虚拟化安全解决方案》一1.1 虚拟化架构
  5. VS2017专业版使用最新版Qt5.9.2教程(转载)
  6. MySQL判断中文字符的方法(转)
  7. Yii1.0框架整合融云解析(一)
  8. 用 Open Live Writer 来写 cnblog.com 博客
  9. WaitForMultipleObjects、WaitForSingleObject、GetExitCodeThread
  10. 限流, 熔断,降级笔记
  11. 最新版本的NGUI插件NGUI Next-Gen UI
  12. 搜狗输入法android德语,教你用搜狗输入法打出法语字符
  13. matlab用本原多项式生成本的m序列,本原多项式产生的m序列
  14. 【新知实验室】——腾讯云TRTC实时音视频体验
  15. python用turtle画一个旋转的风车
  16. 计算机网络学网络制图吗,计算机网络论文发表简述计算机设计制图教学改革
  17. linux的sh脚本编程
  18. Codeforces 892 A Greed(水题)
  19. kof'97 出招表
  20. PyTorch学习笔记06

热门文章

  1. 关于51单片机定时器的使用心得总结
  2. signature=f2388c4f1bce538cc797410d9560f03b,Time variations in geomagnetic intensity
  3. C语言编写学生成绩管理系统
  4. gradle sync failed CreateProcess error=267 目录无效
  5. 职言 | 编码是测试自动化职业生涯的关键:你准备好了吗?
  6. STM32 UCOSII移植
  7. 【文末送课】用Excel、SQL、Python做数据分析有何不同
  8. Java使用日期类实现打印输出各个年份的日历表
  9. 状态机StateMachine使用小记
  10. 〖产品思维训练白宝书 - 产品思维认知篇⑥〗- 职场人所面临困惑与迷茫应该如何破局?