Foros del Web » Programando para Internet » PHP »

Enviar XML por POST a URL

Estas en el tema de Enviar XML por POST a URL en el foro de PHP en Foros del Web. 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 ...
 
Antiguo 17/12/2010, 08:53
Avatar de Thorin  
Fecha de Ingreso: enero-2007
Ubicación: UCI
Mensajes: 30
Antigüedad: 19 años, 1 mes
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
 
Antiguo 17/12/2010, 09:22
 
Fecha de Ingreso: diciembre-2010
Ubicación: Rosario, Santa Fe
Mensajes: 326
Antigüedad: 15 años, 2 meses
Puntos: 13
Respuesta: Enviar XML por POST a URL

Cita:
Con este ejemplo la respuesta es Response not of type text/xml (no content-type header)
Acá te dice que no tenes las cabeceras diciendo que es xml, así que sospecho que esta linea comentada no va:
Cita:
// $client->setHeaders()
Como no tengo conocimiento de nusoap no te puedo ayudar mucho, pero te sugiero que mires el tema de las cabeceras.

Cita:
esto no funiona...
Tal vez con un poco de información no vendría mal, y tratar de ver el porque tampoco, que tal si nos pones que salida envia?

Cita:
curl_setopt($tuCurl, CURLOPT_HEADER, 0);
Si mal no recuerdo eso deberia ser true.
 
Antiguo 17/12/2010, 09:33
Avatar de Thorin  
Fecha de Ingreso: enero-2007
Ubicación: UCI
Mensajes: 30
Antigüedad: 19 años, 1 mes
Puntos: 0
Respuesta: Enviar XML por POST a URL

esta es la respuesta con Nusoap:

HTTP/1.1 200 OK
Date: Fri, 17 Dec 2010 15:31:01 GMT
Transfer-Encoding: chunked
X-Powered-By: Servlet/2.5 JSP/2.1

<?xml version="1.0" encoding="UTF-8"?>

<message>
<serviceResponse returnCode="KO" errorCode="xrs.invalidrequest" />
</message>
 
Antiguo 17/12/2010, 09:37
 
Fecha de Ingreso: diciembre-2010
Ubicación: Rosario, Santa Fe
Mensajes: 326
Antigüedad: 15 años, 2 meses
Puntos: 13
Respuesta: Enviar XML por POST a URL

umm... es agún servicio en especial? porque según esa respuesta es un error en la petición, lo cual también puede ser que el XML que mandas no sea correcto.
 
Antiguo 17/12/2010, 09:49
Avatar de Thorin  
Fecha de Ingreso: enero-2007
Ubicación: UCI
Mensajes: 30
Antigüedad: 19 años, 1 mes
Puntos: 0
Respuesta: Enviar XML por POST a URL

[QUOTE=Thorin;3675250]esta es la respuesta con Nusoap:


returnCode deberia der OK, y devolver un id de session, xrs.invalidrequest, tambien significa que el xm no esta bien formado y si lo está, por ahi anda el asunto.
Saludos y gracias

Etiquetas: enviar, post, url, xml
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta



La zona horaria es GMT -6. Ahora son las 01:27.