0

我正在尝试使用 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 .= "用户代理:MySOAPisOKGuys \r\n"; $soap_out .= "内容类型: 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)

关于正在发生的事情的任何想法

4

2 回答 2

0

我建议,使用 curl 进行肥皂动作。http://www.zimbra.com/forums/developers/9890-solved-simple-soap-admin-example-php.html#post52586

于 2010-04-22T07:49:21.573 回答
0

这不仅仅是打开一个套接字然后向它写入“POST....”的问题——您需要一个完整的 HTTP 堆栈来解析可能的响应(例如,有哪些不同的编码?部分内容?)。使用卷曲。

它当前失败的原因可能是因为远程系统被配置为使用keepalives - 这将再次通过使用适当的HTTP堆栈来解决。

C。

于 2010-04-22T12:41:35.933 回答