Comunidad de diseño web y desarrollo en internet online

Enviar un XML por POST con PHP

Hola, hace tiempo que habia estado pensando en la publicación de artículos y en la creación de un blog con temas varios relacionados con la gestión y ejecución de proyetcos web. Por fin hace casi un mes cristalicé el asunto del blog y hoy comenzaré a escribir en cristalab esperando tener buena aceptación.

Ahora... al grano:

Hace poco, trabajando para comunicarme con un web service me ví en la necesidad de enviar un XML por post. El puro concepto, puede resultar un tanto confuso, sobre todo partiendo de que en general concebimos el envío por post como un formulario html con una serie de variables (campos) que son enviados utilizando el método post a otro "lugar". Tras darle vueltas e investigar un poco me encontré con la siguiente solución:

Código :

    ### Para este ejemplo la cadena $prexml tiene una cadena en formato xml
    //Iniciamos una sesion cURL
    $soap_do = curl_init();
    //Indicamos a donde deseamos enviar nuestro post
    curl_setopt($soap_do, CURLOPT_URL,"http://xml.xxx.com" );
    //Indicamos lo que queremos enviar en nuestro post, en este caso un xml
    curl_setopt($soap_do, CURLOPT_POSTFIELDS,$prexml);
    //Configuramos los headers necesarios. En este caso es importante la definición de la longitud de los datos a enviar
    curl_setopt($soap_do, CURLOPT_HTTPHEADER,array('Content-Type: application/x-www-form-urlencoded', 'Content-Length: '.strlen($prexml),'Host: xml.xxx.com' ));
    //Ejecutamos el curl
    curl_exec($soap_do);
    //Cerramos nuesta sesión
    curl_close($soap_do);


Es importante saber que la función curl_exec retornará true o false dependiendo de si la ejecución fue posible o no; sin embargo en muchas ocasiones no basta con saber si algo se pudo lograr o no; sino que es necesario analizar la respuesta a nuestra petición y realizar una o mas acciones que dependan de ésta. Si este es tu caso, el código anterior debería quedar como sigue (Observen las lineas 11 y 13):

Código :

 1.   ### Para este ejemplo la cadena $prexml tiene una cadena en formato xml
 2.  //Iniciamos una sesion cURL
 3.   $soap_do = curl_init();
 4.  //Indicamos a donde deseamos enviar nuestro post
 5.   curl_setopt($soap_do, CURLOPT_URL,"http://xml.xxx.com" );
 6.   //Indicamos lo que queremos enviar en nuestro post, en este caso un xml
 7.   curl_setopt($soap_do, CURLOPT_POSTFIELDS,$prexml);
 8.   //Configuramos los headers necesarios. En este caso es importante la definición de la longitud de los datos a enviar
 9.   curl_setopt($soap_do, CURLOPT_HTTPHEADER,array('Content-Type: application/x-www-form-urlencoded', 'Content-Length: '.strlen($prexml),'Host: xml.xxx.com' ));
 10.   //Añadimos una opción más para poder almacenar la respuesta en una variable
 11.  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
 12.   //Ejecutamos el curl y almacenamos la respuesta en una variable
 13.   $respuesta=curl_exec($soap_do);
 14.   //Cerramos nuesta sesión
 15.   curl_close($soap_do);


saludos

¿Sabes SQL? ¿No-SQL? Aprende MySQL, PostgreSQL, MongoDB, Redis y más con el Curso Profesional de Bases de Datos que empieza el martes, en vivo.

Publica tu comentario

o puedes...

¿Estás registrado en Cristalab y quieres
publicar tu URL y avatar?

¿No estás registrado aún pero quieres hacerlo antes de publicar tu comentario?

Registrate