PHP实现Soap通讯的方法


Posted in PHP onNovember 03, 2014

本文实例讲述了PHP实现Soap通讯的方法。分享给大家供大家参考。具体实现方法如下:

<?php

function HttpSoap($server, $port, $url, $namespace, $action, $data) {

$fp = @fsockopen($server, $port);

if (!$fp) {

return FALSE;

} else {

$soapData = ConstructData($namespace, $action, $data);

$length = strlen($soapData);

$out = "POST $url HTTP/1.1\r\n";

$out .= "Host: $server\r\n";

$out .= "Content-Type: text/xml; charset=utf-8\r\n";

$out .= "Content-Length: $length\r\n";

$out .= "SOAPAction: \"$namespace$action\"\r\n\r\n";

$out .= $soapData;

$out .= "\r\n\r\n";

fputs($fp, $out);

stream_set_timeout($fp, 2);

$header = "";

while($line = trim(fgets($fp))) {

$header .= $line."\n";

}

$dataPos = strpos($header, "Content-Length: ") + 16;

$dataEnd = strpos($header, "\n", $dataPos);

$dataLength = substr($header, $dataPos, $dataEnd - $dataPos);

$data = "";

if($dataLength > 0) {

$data = fread($fp, $dataLength);

}

fclose($fp);

if(strlen($data) != $dataLength || $dataLength <= 0) {

return FALSE;

}

return $data;

}

}

function ConstructData($namespace, $action, $data) {

$soapData = "

<?xml version="1.0\" encoding=\"utf-8\"?>

\r\n";

$soapData .= "<soap:Envelope xmlns:xsi=\http://www.w3.org/2001/XMLSchema-instance\ xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"\r\n'>http://schemas.xmlsoap.org/soap/envelope/\">\r\n";

$soapData .= " <soap:Body>\r\n";

$soapData .= " <$action xmlns=\"$namespace\">\r\n";

foreach($data as $name => $value) {

$name = iconv("GBK","UTF-8",$name);

$value= iconv("GBK","UTF-8",$value);

$soapData .= " <$name>$value</$name>\r\n";

}

$soapData .= " </$action>\r\n";

$soapData .= " </soap:Body>\r\n";

$soapData .= "</soap:Envelope>";

return $soapData;

}

<?

$data=array(

'user'=>'测试', //如果需要输入二进制数据请采用BASE64编码

'pass'=>'test'

); 

echo HttpSoap('sample.anyhost.com', 80, '/sampleSoap.asmx', 'http://tempuri.org/', 'logIn', $data);

?>

希望本文所述对大家的PHP程序设计有所帮助。

PHP 相关文章推荐
用PHP实现文件上传二法
Oct 09 PHP
关于页面优化和伪静态
Oct 11 PHP
PHP中__get()和__set()的用法实例详解
Jun 04 PHP
PHP中常用的输出函数总结
Sep 22 PHP
PHP将页面中点击数量高的链接进行高亮显示的方法
May 30 PHP
ucenter中词语过滤原理分析
Jul 13 PHP
PHP  实现等比压缩图片尺寸和大小实例代码
Oct 08 PHP
Yii遍历行下每列数据的方法
Oct 17 PHP
php+redis实现商城秒杀功能
Nov 19 PHP
针对thinkPHP5框架存储过程bug重写的存储过程扩展类完整实例
Jun 16 PHP
laravel 错误处理,接口错误返回json代码
Oct 25 PHP
php swoft框架实例用法
Dec 22 PHP
ThinkPHP实现二级循环读取的方法
Nov 03 #PHP
ThinkPHP写数组插入与获取最新插入数据ID实例
Nov 03 #PHP
ThinkPHP有变量的where条件分页实例
Nov 03 #PHP
PHP的拦截器实例分析
Nov 03 #PHP
php类中的各种拦截器用法分析
Nov 03 #PHP
PHP类的反射用法实例
Nov 03 #PHP
php之curl设置超时实例
Nov 03 #PHP
You might like
vBulletin HACK----关于排版的两个HACK
2006/10/09 PHP
php json_encode奇怪问题说明
2011/09/27 PHP
apache mysql php 源码编译使用方法
2012/05/03 PHP
thinkphp修改配置进入默认首页的方法
2017/02/07 PHP
Thinkphp开发--集成极光推送
2017/09/15 PHP
PHP Redis扩展无法加载的问题解决方法
2019/08/22 PHP
javascript div 遮罩层封锁整个页面
2009/07/10 Javascript
Jquery调用webService远程访问出错的解决方法
2010/05/21 Javascript
JavaScript 浏览器验证代码(来自discuz)
2010/07/17 Javascript
基于jQuery的计算文本框字数的代码
2012/06/06 Javascript
JS在TextArea光标位置插入文字并实现移动光标到文字末尾
2013/06/21 Javascript
Jquery实现图片预加载与延时加载的方法
2014/12/22 Javascript
javascript操作Cookie(设置、读取、删除)方法详解
2015/03/18 Javascript
javascript实现类似百度分享功能的方法
2015/07/27 Javascript
BootStrap中Tab页签切换实例代码
2016/05/30 Javascript
浅谈js数组和splice的用法
2016/12/04 Javascript
jQuery菜单实例(全选,反选,取消)
2017/08/28 jQuery
浅谈react-router HashRouter和BrowserRouter的使用
2017/12/29 Javascript
js中如何完美的解析数据
2018/03/18 Javascript
vue全局组件与局部组件使用方法详解
2018/03/29 Javascript
通过nodejs 服务器读取HTML文件渲染到页面的方法
2018/05/17 NodeJs
详解Vue CLI3配置解析之css.extract
2018/09/14 Javascript
微信小程序自定义tabbar custom-tab-bar 6s出不来解决方案(cover-view不兼容)
2019/11/01 Javascript
python使用cookie库操保存cookie详解
2014/03/03 Python
python应用程序在windows下不出现cmd窗口的办法
2014/05/29 Python
Python制作爬虫抓取美女图
2016/01/20 Python
python中requests小技巧
2017/05/10 Python
利用Python制作动态排名图的实现代码
2020/04/09 Python
Python turtle库的画笔控制说明
2020/06/28 Python
python如何求圆的面积
2020/07/01 Python
python操作链表的示例代码
2020/09/27 Python
2014年两会学习心得体会
2014/03/17 职场文书
2014年医药代表工作总结
2014/11/22 职场文书
辞职信怎么写?你都知道吗?
2019/06/24 职场文书
大学生,三分钟即兴演讲稿
2019/07/22 职场文书
app场景下uniapp的扫码记录
2022/07/23 Java/Android