viernes, 13 de mayo de 2016

Realizar petición post con cURL

El siguiente ejemplo trata de como realizar una petición POST con cURL y obtener los datos del servidor en forma de JSON para su posterior manipulación. El ejercicio consiste en que el usuario ingrese un dato, en este caso el nombre de un sujeto y que el servidor devuelva la información de éste.

El archivo index.php básicamente es la interfaz gráfica de la aplicación. Consta de una caja de texto y un botón; cuando lo presiona abre una sesión cURL a la url especificada y hace comunicación en el servidor, si la búsqueda es exitosa devuelve los respectivos resultados.

Las principales líneas del código están comentadas para entender el proceso.

Archivo: index.php


<?php

if ($_SERVER["REQUEST_METHOD"] == "POST") {//cuando se procesa el formulario

$nombre=$_POST['usuario'];//capturo lo que tiene la caja de texto

$variables="nombre_user=".$nombre;//el parametro nombre_user almacena el valor ingresado
$url="http://localhost/curl/datos.php";

$ch = curl_init($url);//inicia sesion cURL

curl_setopt($ch, CURLOPT_POST, true);//peticion post
curl_setopt($ch, CURLOPT_POSTFIELDS, $variables);//le envio el parametro a la url
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$result = curl_exec($ch);//obtengo la respuesta del servidor
curl_close($ch); //liberar recursos

}

?>

<!DOCTYPE html>
<html>
<head>
<title>cURL</title>
</head>
<body>

<h2>cURL</h2>

<form method="POST" action="<?php echo $_SERVER["PHP_SELF"] ?>"><--se procesa el mismo-->
Nombre: <input type="text" name="usuario" placeholder="Entre usuario" required="required" />
<input type="submit" value="Buscar" />

</form>

<hr>

<?php

if(isset($result)){//si esta variable (respuesta del servidor) tiene valor imprimo lo que tiene

$user=json_decode($result);//como el servidor devuelve la info en forma de json, lo convierto en array para manipularlo.

if(array_key_exists('nombre',$user)){//si el anterior array tiene una key nombre, es porque la busqueda fue exitosa.

echo 'Id: '.$user->id.'<br >';
echo 'Nombre: '.$user->nombre.'<br >';
echo 'Edad: '.$user->edad;
}else{
echo $user->message;
}

}

?>

</body>
</html>


Este archivo contiene la información de los usuarios en formato JSON, si el nombre ingresado por el usuario existe devuelve su información con forma de JSON.

Archivo: datos.php


<?php

#json
$json_users=' [{"id":"01","nombre":"John","edad":"26"},
{"id":"02","nombre":"Pete","edad":"34"},
{"id":"03","nombre":"Wilson","edad":"56"},
{"id":"04","nombre":"Alan","edad":"12"},
{"id":"05","nombre":"Rob","edad":"43"}] ';


$nombre_user=$_POST['nombre_user'];//recibo el valor ingresado por el usuario

$datos_users=json_decode($json_users);//convierto el anterior json en array para manipular datos

//la variable $respuesta envia los resultados
$respuesta='{"code":"404","message":"No encontrado"}';//si la búsqueda no contiene resultados envía un mensaje de no encontrado

for ($i=0; $i < count($datos_users); $i++) { //recorro el array para realizar la busqueda

if (strtolower($datos_users[$i]->nombre)==strtolower($nombre_user)){//si existe un usuario, le envio la respuesta de este en formato json

$respuesta='{"id":"'.$datos_users[$i]->id.'","nombre":"'.$datos_users[$i]->nombre.'","edad":"'.$datos_users[$i]->edad.'"}';
break; //detiene la busqueda

}
}

echo $respuesta;//respuesta final del servidor

?>


Descargar código en Github.

No hay comentarios.:

Publicar un comentario