fsockopen肥皂要求

时间:2010-04-22 07:10:38

标签: php sockets soap fgets

我正在尝试使用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)

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

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

它不仅仅是打开一个套接字然后向它写'POST ....'的问题 - 你需要一个完整的HTTP堆栈来解析可能的响应(例如,什么不同的编码?Partial Content?)。使用cURL。

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

下进行。