Enviar datos por POST desde php mediante cURL

Habitualmente para mandar una petición HTTP con datos POST solemos utilizar un formulario desde HTML, y enviarlo ya sea de forma nativa o mediante AJAX/Javascript.

Pero la semana pasada me vi con una cuestión delicada en el curro. Tenía que enviar un archivo utilizando un API externa y, como medida de autenticación, tenía que generar una firma que consistía en un hash de los parámetros más una clave secreta. El «secretismo» de la clave me impedía generar dicha firma en el cliente. Aunque la metiera en un campo oculto o la encapsulara dentro del javascript siempre existe un riesgo porque tiene que llegar al equipo del cliente. Por lo que pensé «bueno, alguna forma habrá de hacer esto en el servidor». Y descubrí cURL, una herramienta libre que me solucionaría la papeleta.

El razonamiento para solucionar el problema fue el siguiente: envío los datos por POST de la forma habitual al servidor, a una clase PHP que los maneje. Desde ahí genero la firma con los datos del formulario más la clave secreta (que de esta forma nunca viaja hasta el cliente), los envío al API, recojo la respuesta y la manipulo. Todo fetén.

¿Y como lanzo la petición desde cURL? Aquí te rulo un ejemplo del código:

<?php
//Lo primerito, creamos una variable iniciando curl, pasándole la url
$ch = curl_init('http://loquesea.com/quepachacolega.php');

//especificamos el POST (tambien podemos hacer peticiones enviando datos por GET
curl_setopt ($ch, CURLOPT_POST, 1);

//le decimos qué paramáetros enviamos (pares nombre/valor, también acepta un array)
curl_setopt ($ch, CURLOPT_POSTFIELDS, "parametro1=valor1&parametro2=valor2");

//le decimos que queremos recoger una respuesta (si no esperas respuesta, ponlo a false)
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true)

//recogemos la respuesta
$respuesta = curl_exec ($ch);

//o el error, por si falla
$error = curl_error($ch);

//y finalmente cerramos curl
curl_close ($ch);
?>

Et voilà, petición enviada con datos por POST. Un truquito fácil que te puede ayudar a automatizar tareas o a añadir seguridad a tu página.

9 comentarios en “Enviar datos por POST desde php mediante cURL

  1. alf

    y ya que lo envias por post a la pagina «quepachacolega.php» como recoges y manipulas los datos enviados en «quepachacolega.php»? , saludos y gran aporte 😀

    1. Supongo que los datos enviados se recogen de igual manera con $_POST[‘parametro1’] y $_POST[‘parametro 2’] o me equivoco?. de igual forma php en su web tiene un apartado en su documentación para curl. Nunca le había dado importancia hasta ahora xd. Gracias por la info.
      Saludos

  2. alinton_gutierrez

    gracias por ayudarme.. encontre algo interesante: podemos implemetar un mecanismo : guardas la pagina web localmente editas el codigo html action le pones GET, y le llenas con texto y te fijas en la url que esta recibiendo los datos por POST. .. me sirvio junto con tu codigo, por que no conocia el codigo hacia el que le iba pasar los parametros POST.. gracias saludes desde Nicaragua

  3. DOSunix

    Colega me acaba de alegrar el día la semana y el mes, me estaba rompiendo la cabeza con un temita de un web services que estoy implementando y macho, no hay documentación que explique mejor y más sencillo lo que planteas. Me ha quedado clarísimo. Mil millones de gracias.

Deja un comentario

Este sitio utiliza Akismet para reducir el spam. Conoce cómo se procesan los datos de tus comentarios.