Ver Mensaje Individual
  #1 (permalink)  
Antiguo 17/12/2010, 08:53
Avatar de Thorin
Thorin
 
Fecha de Ingreso: enero-2007
Ubicación: UCI
Mensajes: 30
Antigüedad: 17 años, 3 meses
Puntos: 0
Enviar XML por POST a URL

Hola a todos,

Necesito enviar un XML por POST a una URL determinada, pero me especifican que es obligatorio que tenga el Content-Type:application/x-www-form-urlencoded,
bien, he probado con Nusoap, con Curl y con streams, pero no logro que funcione...aquí les dejo mis ejemplo a ver si por favor me sugieren alguna idea ! ya esto me tiene desesperado...

Con NuSoap


require_once('lib/nusoap.php');

$url = 'myurl';
$client = new nusoap_client('$url');
//$client->soap_defencoding = 'UTF-8';
// $client->setHeaders()
$err = $client->getError();

if ($err) {
echo '<h2>Constructor error</h2><pre>' . $err . '</pre>';
}

$xml = '<?xml version="1.0" encoding="UTF-8"?>
<message>
<serviceRequest serviceCode="authentify">
<caller callerCode="123" password="123"/>
</serviceRequest>
</message>
';

$result = $client->send( $xml );
// $result = $client->call('message','','','',$xml);

if ($client->fault) {
echo '<h2>Fault</h2><pre>';
print_r( $result );
echo '</pre>';
} else {
$err = $client->getError();
if ($err) {
echo '<h2>Error</h2><pre>' . $err . '</pre>';
} else {
echo '<h2>Result</h2><pre>';
print_r($result);
echo '</pre>';
}
}

Con este ejemplo la respuesta es Response not of type text/xml (no content-type header)

Con CURL

$data = '<?xml version="1.0" encoding="UTF-8"?>
<message>
<serviceRequest serviceCode="authentify">
<caller callerCode="123" password="123"/>
</serviceRequest>
</message>';

$url = 'myurl';
$tuCurl = curl_init();
curl_setopt($tuCurl, CURLOPT_URL,$url);
curl_setopt($tuCurl, CURLOPT_PORT , 443);
curl_setopt($tuCurl, CURLOPT_VERBOSE, 0);
curl_setopt($tuCurl, CURLOPT_HEADER, 0);
curl_setopt($tuCurl, CURLOPT_SSLVERSION, 3);
curl_setopt($tuCurl, CURLOPT_POST, 1);
curl_setopt($tuCurl, CURLOPT_SSL_VERIFYPEER, 1);
curl_setopt($tuCurl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($tuCurl, CURLOPT_POSTFIELDS, $data );
curl_setopt($tuCurl, CURLOPT_HTTPHEADER, array("Content-Type:application/x-www-form-urlencoded ","Content-length: ".strlen($data)));

$tuData = curl_exec($tuCurl);
if(!curl_errno($tuCurl)){
$info = curl_getinfo($tuCurl);
echo 'Took ' . $info['total_time'] . ' seconds to send a request to ' . $info['url'];
} else {
echo 'Curl error: ' . curl_error($tuCurl);
}

curl_close($tuCurl);
echo $tuData;

esto no funiona...

y por último streams

$xml = 'XML-REQUEST=<?xml version="1.0" encoding="UTF-8"?>
<message>
<serviceRequest serviceCode="authentify">
<caller callerCode="123" password="123"/>
</serviceRequest>
</message>';

$context = stream_context_create(array(
'http' => array(
'method' => 'POST',
'header' => "Content-type: application/x-www-form-urlencoded\r\n",
'content' => $xml
),
));

$url = 'myurl';
$resp = file_get_contents($url, false, $context);
print_r( $resp );

Alguna sugerencia para mandar por POST el XML, como header application/x-www-form-urlencoded

Gracias de antemano.
Saludos

Última edición por Thorin; 17/12/2010 a las 09:01