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 相关文章推荐
给apache2.2加上mod_encoding模块後 php5.2.0 处理url出现bug
Apr 12 PHP
PHP中的extract的作用分析
Apr 09 PHP
php数组函数序列之array_pop() - 删除数组中的最后一个元素
Nov 07 PHP
PHP实现的封装验证码类详解
Jun 18 PHP
浅谈web上存漏洞及原理分析、防范方法(文件名检测漏洞)
Jun 29 PHP
php中操作memcached缓存进行增删改查数据的实现代码
Aug 15 PHP
destoon调用discuz论坛中带图片帖子的实现方法
Aug 21 PHP
PHP函数extension_loaded()用法实例
Jan 19 PHP
thinkphp实现图片上传功能
Jan 13 PHP
php结合md5实现的加密解密方法
Jan 25 PHP
基于thinkPHP类的插入数据库操作功能示例
Jan 06 PHP
PHP判断是否是json字符串
Apr 01 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
收音机指标测试方法及仪器
2021/03/01 无线电
smarty的保留变量问题
2008/10/23 PHP
PHP计划任务之关闭浏览器后仍然继续执行的函数
2010/07/22 PHP
PHP中strlen()和mb_strlen()的区别浅析
2014/06/19 PHP
php设计模式之简单工厂模式详解
2014/09/04 PHP
PHP检查网站是否宕机的方法示例
2017/07/24 PHP
JSON PHP中,Json字符串反序列化成对象/数组的方法
2018/05/31 PHP
测试JavaScript字符串处理性能的代码
2009/12/07 Javascript
轻量级 JS ToolTip提示效果
2010/07/20 Javascript
jQuery解决下拉框select设宽度时IE 6/7/8下option超出显示不全
2013/05/27 Javascript
鼠标移到div,浮层显示明细,弹出层与div的上边距左边距重合(示例代码)
2013/12/14 Javascript
js中运算符&amp;&amp; 和 || 的使用记录
2014/08/21 Javascript
简介JavaScript中Math.cos()余弦方法的使用
2015/06/15 Javascript
再谈javascript注入 黑客必备!
2016/09/14 Javascript
Javascript中引用类型传递的知识点小结
2017/03/06 Javascript
vue.js利用Object.defineProperty实现双向绑定
2017/03/09 Javascript
解决VUEX兼容IE上的报错问题
2018/03/01 Javascript
vue 自定义指令自动获取文本框焦点的方法
2018/08/25 Javascript
vue2使用keep-alive缓存多层列表页的方法
2018/09/21 Javascript
[00:20]DOTA2荣耀之路7:-ah fu-抢盾
2018/05/31 DOTA
Python中3种内建数据结构:列表、元组和字典
2014/11/30 Python
python 类对象和实例对象动态添加方法(分享)
2017/12/31 Python
Python sys模块常用方法解析
2020/02/20 Python
Pytorch自定义Dataset和DataLoader去除不存在和空数据的操作
2021/03/03 Python
纯CSS3实现漂亮的input输入框动画样式库(Text input love)
2018/12/29 HTML / CSS
船餐厅和泰晤士河餐饮游轮:Bateaux London
2018/03/19 全球购物
斯洛伐克香水和化妆品购物网站:Parfemy-Elnino.sk
2020/01/28 全球购物
StringBuilder和String的区别
2015/05/18 面试题
主管会计岗位责任制
2014/02/10 职场文书
机关办公室岗位职责
2014/04/16 职场文书
和谐家庭演讲稿
2014/05/24 职场文书
房屋所有权证明
2014/10/20 职场文书
学习十八届四中全会精神思想汇报
2014/10/23 职场文书
致地震灾区的慰问信
2015/03/23 职场文书
2016新年慰问信范文
2015/03/25 职场文书
导游词之青城山景区
2019/09/27 职场文书