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

Publica tu comentario
o puedes...
¿Estás registrado en Cristalab y quieres
publicar tu URL y avatar?
Inicia sesión
¿No estás registrado aún pero quieres hacerlo antes de publicar tu comentario?
Registrate