xml gennem socket
Har et problem med at parse noget xml til en socket connection. Jeg har oprettet en socket connection til en ekstern service, hvor jeg sender noget xml til, men de returnerer følgende fejl:<parse_error>
<error_reason>Invalid xml declaration.
</error_reason>
<error_line>2</error_line>
<error_linepos>3</error_linepos>
<error_srcText><?xml version="1.0" standalone="no"?></error_srcText>
</parse_error>
Har lurret at linjen de melder fejl på er linje 2, hvilket der tyder på at der må være en tom linje øverst i den xml de modtager fra mig. Er der nogen som har en ide om hvordan man fjerner denne, synes jeg har prøvet alt. Her er mit script:
<?php
header ("content-type: text/xml");
function readUrlUsingSocket($xml){
$xml = trim($xml);
$xml = urlencode($xml);
$host = "host";
// Open a connection
$socket = @socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false)
die("socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n");
$result = @socket_connect($socket, $host, 80);
if ($result === false)
die("socket_connect() failed.\nReason: ($result) " . socket_strerror(socket_last_error($socket)) . "\n");
// Send the request
$request = "POST /path.asp HTTP/1.0\r\n";
$request .= "Accept: */*\r\n";
$request .= "User-Agent: request_socket/1.0\r\n";
$request .= "Content-type: application/x-www-form-urlencoded\r\n";
$request .= "Content-length: ".(strlen($xml)+7)."\r\n";
$request .= "\r\n";
$request .= "xml_in=".$xml."\r\n";
$request .= "Connection: close";
socket_write($socket, $request, strlen($request));
// Retrieving the response
$response = "";
while ( ($out = @socket_read($socket, 4096, PHP_BINARY_READ)) != "" )
$response = $response . $out;
if ($out===false)
die(socket_strerror(socket_last_error($socket)));
socket_close($socket);
// Split the header/body of the response
$response_r = split("\r\n\r\n", $response, 2);
// Handled the permanent redirection as per http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.30
if (preg_match("/Location: ([^\r\n]+)/i", $response_r[0], $matches ))
return readUrlUsingSocket($matches[1]);
else
return $response_r[1];
}
$xml = '<?xml version="1.0" standalone="no"?>
<REQUEST>
<LOGIN>
<USERNAME>brugernavn</USERNAME>
<PASSWORD>password</PASSWORD>
</LOGIN>
</REQUEST>';
echo readUrlUsingSocket($xml);