fsockopen soap请求

问题描述:

我想发送一个SOAP消息给使用php的服务。
我想的fsockopen做到这一点,这里的是代码:fsockopen soap请求

<?php 

$计划生育= @fsockopen( “SSL://xmlpropp.worldspan.com”,443,$的errno,$ errstr);如果(!is_resource($ fp)){ die('fsockopen call failed with error number'。$ 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。=“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)

发生了什么

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

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

C.

+0

在服务器中它没有安装php curl扩展名,并且不可能安装它。我怎么能用fsockopen()来做到这一点。上面的代码似乎是正确的。 – gosom 2010-04-22 11:54:57