我正在尝试使用php向服务发送SOAP消息 我想用fsockopen来做,这是代码:
<?php
$ fp = @fsockopen(“ssl://xmlpropp.worldspan.com”,443,$ errno,$ errstr);
if(!is_resource($ fp)){ die('fsockopen调用失败,错误号'。$ errno。'。'。$ errstr); }
$ soap_out =“POST / xmlts HTTP / 1.1 \ r \ n”; $ soap_out。=“主持人:212.127.18.11:8800 \ r \ n”; // $ soap_out。=“User-Agent:MySOAPisOKGuys \ r \ n”; $ soap_out。=“Content-Type:text / xml; charset ='utf-8'\ r \ n”; $ soap_out。=“内容长度:999 \ r \ n \ r \ n”; $ soap_put。=“连接:关闭\ r \ n”; $ soap_out。=“SOAPAction:\ r \ n”; $ soap_out。=' Worldspan的 这是一个测试 “;
if(!fputs($fp, $soap_out, strlen($soap_out)))
echo "could not write";
echo "<xmp>".$soap_out."</xmp>";
echo "--------------------<br>";
while (!feof($fp))
{
$soap_in .= fgets($fp, 100);
}
echo "<xmp>$soap_in</xmp>";
fclose($fp);
echo "ok";
上面的代码只是挂起。如果我删除它的类型确定,所以我想问题是$ soap_in。= fgets($ fp,100)
关于正在发生的事情的任何想法
答案 0 :(得分:0)
我建议,使用curl进行肥皂操作。 http://www.zimbra.com/forums/developers/9890-solved-simple-soap-admin-example-php.html#post52586
答案 1 :(得分:0)
它不仅仅是打开一个套接字然后向它写'POST ....'的问题 - 你需要一个完整的HTTP堆栈来解析可能的响应(例如,什么不同的编码?Partial Content?)。使用cURL。
它当前失败的原因可能是因为远程系统配置为使用keepalive - 这将再次通过使用正确的HTTP堆栈来解决。
下进行。