-
-
Save parzibyte/378d27edd6c8761c390a353142c3f2cd to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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