Skip to content

Instantly share code, notes, and snippets.

@parzibyte
Created Apr 5, 2019
Embed
What would you like to do?
<?php
/**
* Ejemplo de cómo usar PHP, JSON y cURL para enviar
* datos codificados a otro servidor
*
* @author parzibyte
*/
# Definimos los datos que vamos a enviar, estos pueden venir de cualquier lugar
# Los hacemos complejos y largos para demostrar cómo se pueden anidar
$persona = [
"nombre" => "Luis Cabrera",
"edad" => 21,
"esEstudiante" => true,
"nickname" => "parzibyte",
"sitioWeb" => "parzibyte.me",
"lenguajes" => ["PHP", "Kotlin", "Java", "Go", "JavaScript"],
"gustos" => [
"musica" => ["Rolling Stones", "David Bowie", "The Sweet", "Queen", "Elvis Presley"],
"libros" => [
[
"autor" => "Thomas Harris",
"nombre" => "Dragón Rojo",
],
[
"autor" => "¿Sueñan los Androides con ovejas eléctricas?",
"nombre" => "Philip K. Dick",
],
[
"autor" => "James Patterson",
"nombre" => "El gato y el ratón",
],
[
"autor" => "Isaac Asimov",
"nombre" => "El hombre bicentenario",
],
[
"autor" => "Stephen King",
"nombre" => "Cementerio de animales",
],
[
"autor" => "Stephen King",
"nombre" => "La milla verde",
],
]
]
];
// Los codificamos
// recomendado: https://parzibyte.me/blog/2018/12/26/codificar-decodificar-json-php/
$datosCodificados = json_encode($persona);
// Comenzar a crear el objeto de curl
# A dónde se hace la petición...
$url = "http://localhost/curl_json/api.php";
$ch = curl_init($url);
# Ahora le ponemos todas las opciones
# Nota: podríamos usar la versión corta de arreglos: https://parzibyte.me/blog/2018/10/11/sintaxis-corta-array-php/
curl_setopt_array($ch, array(
// Indicar que vamos a hacer una petición POST
CURLOPT_CUSTOMREQUEST => "POST",
// Justo aquí ponemos los datos dentro del cuerpo
CURLOPT_POSTFIELDS => $datosCodificados,
// Encabezados
//CURLOPT_HEADER => true,
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'Content-Length: ' . strlen($datosCodificados), // Abajo podríamos agregar más encabezados
'Personalizado: ¡Hola mundo!', # Un encabezado personalizado
),
# indicar que regrese los datos, no que los imprima directamente
CURLOPT_RETURNTRANSFER => true,
));
# Hora de hacer la petición
$resultado = curl_exec($ch);
# Vemos si el código es 200, es decir, HTTP_OK
$codigoRespuesta = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if($codigoRespuesta === 200){
# Decodificar JSON porque esa es la respuesta
$respuestaDecodificada = json_decode($resultado);
# Simplemente los imprimimos
echo "<strong>El servidor dice que la hora de petición fue: </strong>" . $respuestaDecodificada->fechaYHora;
echo "<br><strong>El servidor dice que el primer lenguaje es: </strong>" . $respuestaDecodificada->primerLenguaje;
echo "<br><strong>Los encabezados que el servidor recibió fueron: </strong><pre>" . var_export($respuestaDecodificada->encabezados, true) . "</pre>";
echo "<br><strong>Los gustos musicales que el servidor recibió fueron: </strong><pre>" . var_export($respuestaDecodificada->gustosMusicales, true) . "</pre>";
echo "<br><strong>Los libros que el servidor recibió fueron: </strong><pre>" . var_export($respuestaDecodificada->libros, true) . "</pre>";
echo "<br><strong>Mensaje del servidor: </strong>" . $respuestaDecodificada->mensaje;
}else{
# Error
echo "Error consultando. Código de respuesta: $codigoRespuesta";
}
curl_close($ch);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment