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