views:

108

answers:

2

I am trying to send a SOAP message to a service using php.
I want to do it with fsockopen, here's is the code :

<?php

$fp = @fsockopen("ssl://xmlpropp.worldspan.com", 443, $errno, $errstr);

if (!is_resource($fp)) { die('fsockopen call failed with error number ' . $errno . '.' . $errstr); }

$soap_out = "POST /xmlts HTTP/1.1\r\n"; $soap_out .= "Host: 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 .= "Content-Length: 999\r\n\r\n"; $soap_put .= "Connection: close\r\n"; $soap_out .= "SOAPAction:\r\n"; $soap_out .= ' Worldspan This is a test ';

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";

the above code just hangs . if i remove the while it types ok, so i suppose the problem is at $soap_in .= fgets($fp, 100)

Any ideas of what is happening

A: 

I recommend, use curl for soap actions. http://www.zimbra.com/forums/developers/9890-solved-simple-soap-admin-example-php.html#post52586

Osman Üngür
in the server it is not installed the php curl extension and it is not possible to install it. How can i do it with the fsockopen() . THe above code seems to be right.
gosom
A: 

Its not just a matter of opening a socket then writing 'POST....' to it - you need a full HTTP stack to parse the possible responses (e.g. what different encodings? Partial Content?). Use cURL.

The reason its currently failing is probably because the remote system is configured to use keepalives - which would again be solved by using a proper HTTP stack.

C.

symcbean