这篇文章主要介绍了php实现soap通讯的方法,是web service的一个典型应用,需要的朋友可以参考下
本文实例讲述了php实现soap通讯的方法。分享给大家供大家参考。具体实现方法如下:
复制代码 代码如下:
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 return false;
}
return $data;
}
}
function constructdata($namespace, $action, $data) {
$soapdata =
\r\n;
$soapdata .= \>\r\n;
$soapdata .= \r\n;
$soapdata .= \r\n;
foreach($data as $name => $value) {
$name = iconv(gbk,utf-8,$name);
$value= iconv(gbk,utf-8,$value);
$soapdata .= $value$name>\r\n;
}
$soapdata .= $action>\r\n;
$soapdata .= \r\n;
$soapdata .= ;
return $soapdata;
}
$data=array(
'user'=>'测试', //如果需要输入二进制数据请采用base64编码
'pass'=>'test'
);
echo httpsoap('sample.anyhost.com', 80, '/samplesoap.asmx', 'http://tempuri.org/', 'login', $data);
?>
希望本文所述对大家的php程序设计有所帮助。
,