Enviar JSON con PHP

Petición HTTP con PHP – enviar JSON y formulario

Hacer petición HTTP POST en PHP

En este post te mostraré a usar PHP para hacer una petición a través de HTTP usando el método POST. Veremos cómo enviar datos de formulario y cómo enviar JSON.

Normalmente PHP se utiliza como servidor para servir y atender peticiones, pero de igual forma se puede usar como cliente para consumir otros servicios.

Por poner un ejemplo, me viene a la mente aquella ocasión en la que acortamos enlaces con coinhive.

Las funciones que veremos son:

  1. http_build_query
  2. stream_context_create
  3. file_get_contents
  4. json_encode

Verás que será muy sencillo. Las peticiones serán hechas a httpbin.org, un sitio que sirve como espejo para indicar lo que le enviamos, perfecto para probar.

Petición HTTP POST en PHP – datos de formulario

Vamos a enviar datos en forma de formulario. Para esto, definimos los datos en un arreglo (línea 13). Podemos colocar todos los datos que queramos.

Después creamos las opciones para la petición HTTP (línea 18) y agregamos los datos a la misma. Añadimos un encabezado o header para indicar el tipo de contenido, y también el método (líneas 20 y 21).

La parte importante es cuando llamamos a http_build_query para convertir nuestro arreglo en un formato de formulario codificado.

<?php
/*
Enviar formulario con petición HTTP POST
en PHP

@author parzibyte

https://parzibyte.me/blog
 */

$url = "https://httpbin.org/post";
// Los datos de formulario
$datos = [
    "nombre" => "Luis Cabrera Benito",
    "web" => "https://parzibyte.me/blog",
];
// Crear opciones de la petición HTTP
$opciones = array(
    "http" => array(
        "header" => "Content-type: application/x-www-form-urlencoded\r\n",
        "method" => "POST",
        "content" => http_build_query($datos), # Agregar el contenido definido antes
    ),
);
# Preparar petición
$contexto = stream_context_create($opciones);
# Hacerla
$resultado = file_get_contents($url, false, $contexto);
if ($resultado === false) {
    echo "Error haciendo petición";
    exit;
}

# si no salimos allá arriba, todo va bien
var_dump($resultado);

Después creamos un contexto (línea 26) con las opciones HTTP definidas, e invocamos a file_get_contents para que haga la petición.

Recuerda que esa función regresa false si ocurre algún error durante la petición, hay que manejar ese caso (línea 29).

Si todo va bien, imprimimos con var_dump el resultado. Como hicimos la petición a httpbin.org el mismo devuelve una cadena que podemos decodificar como JSON, pero el manejo de la respuesta depende de la API o sitio que consumas.

La respuesta es:

Petición HTTP en PHP - Método POST con datos de formulario

Como ves, en el apartado de form están los datos que enviamos, los cuales definimos anteriormente en el arreglo.

Enviar JSON con PHP

Ahora veremos cómo hacer una petición HTTP en PHP pero enviando un JSON. Haremos la petición a httpbin como anteriormente lo hicimos.

Lo único que cambia es que no usamos http_build_query (pues no son datos de formulario) y el tipo de contenido.

Ahora en su lugar usamos json_encode.

<?php
/*
Enviar JSON con PHP

@author parzibyte

https://parzibyte.me/blog
 */

$url = "https://httpbin.org/post";
// Los datos JSON
$datos = [
    "nombre" => "Luis Cabrera Benito",
    "web" => "https://parzibyte.me/blog",
];
// Crear opciones de la petición HTTP
$opciones = array(
    "http" => array(
        "header" => "Content-type: application/json\r\n",
        "method" => "POST",
        "content" => json_encode($datos), # Agregar el contenido definido antes
    ),
);
# Preparar petición
$contexto = stream_context_create($opciones);
# Hacerla
$resultado = file_get_contents($url, false, $contexto);
if ($resultado === false) {
    echo "Error haciendo petición";
    exit;
}

# si no salimos allá arriba, todo va bien
var_dump($resultado);

Si analizamos la salida, vemos lo siguiente:

Enviar JSON con PHP
Respuesta al enviar JSON con PHP haciendo una petición HTTP

Tenemos dos cosas interesantes. La primera es que en los datos “crudos” o raw tenemos la cadena JSON.

Por otro lado, httpbin intenta decodifcar el JSON y como lo que le enviamos es un JSON válido, muestra los datos.

Recuerda que en este caso estoy mostrando la respuesta, en tu caso al consumir la API pueden cambiar las cosas y la respuesta puede ser otra.

Conclusión

Así es como podemos usar PHP para consumir otros sitios. Esto viene de maravilla cuando necesitamos comunicar servidor con servidor, ya que algunos casos (como cuando tenemos una clave secreta para consumir una API) lo requieren.

Recuerda que en este caso solo imprimimos la respuesta, en tu caso puedes decodificarla como JSON o leerla de alguna forma, dependiendo de la documentación del servicio que estés consumiendo.

Te invito a leer más sobre PHP o el consumo de APIs en mi blog.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.

5 comentarios en “Petición HTTP con PHP – enviar JSON y formulario”

  1. hola, me cree un archivo script.php para que haga solicitudes http a la pagina de loterías, luego creé un cron job para que ejecute el script.ph cada cierto tiempo, lo cierto es que no funciona y he intentado de todo. puedes ayudarme? Gracias

  2. Hola, gracias por el artículo, esexcelente, hora bien, tengo una pregunta, como se debe agregar un token en los headers? me dieron un token para acceder a una API. Muchísimas gracias !!!

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *