curl GET Request con PHP

Guía cURL get request con PHP. Aprenda sobre la petición GET, y como implementar una petición GET con curl en PHP.
4 min read
curl GET Request with PHP

curl es una herramienta de línea de comandos y una librería que se utiliza para transferir datos con URLs. En el contexto del desarrollo web, curl permite a los usuarios hacer peticiones e interactuar con varios recursos de internet, como sitios web y APIs, directamente desde la línea de comandos o a través de scripts.

curl es compatible con una amplia gama de protocolos, como HTTP, HTTPS, FTP y FTPS, lo que lo hace increíblemente versátil para tareas como la transferencia de archivos, la recuperación de datos y la integración de API. La capacidad de curl para manejar operaciones complejas y enviar distintos tipos de peticiones lo ha convertido en una herramienta indispensable, que permite una comunicación fluida entre aplicaciones y servidores remotos. Su flexibilidad y facilidad de uso lo convierten en un componente fundamental en los flujos de trabajo del desarrollo web moderno.

Las peticiones GET son un componente crucial en la comunicación web que están diseñadas para recuperar información o datos de un recurso específico en un servidor web. En este tutorial, aprenderá como usar curl para hacer una petición GET con PHP.

Qué es una Petición GET

 

Una petición GET es un método HTTP que está diseñado para recuperar información o datos de un recurso específico en un servidor web. Por ejemplo, cuando introduce una URL en su navegador web y pulsa enter, está lanzando una petición GET. El navegador realiza una petición GET al servidor y devuelve una página web que se muestra en el navegador.

El propósito de una petición GET es solicitar al servidor un recurso concreto, ya sea una página HTML, una imagen, un documento o incluso datos de una API. La simplicidad de la petición GET reside en su método; es una operación idempotente, lo que significa que no debe cambiar el estado del servidor o del recurso solicitado. Una petición GET es de sólo lectura, y normalmente no implica el envío de datos o la realización de alteraciones en el servidor; su función principal es la recuperación de datos.

Las peticiones GET también permiten añadir pares de gran valor, conocidos como parámetros de consulta, a la URL. Los parámetros de consulta permiten especificar exactamente lo que se desea. Por ejemplo, cuando busca algo en un buscador, la consulta que introduce se pasa como una serie de parámetros en una petición GET al servidor del buscador. El servidor procesa estos parámetros, obtiene los resultados de la búsqueda y los devuelve como respuesta, que se muestra en el navegador.

Es importante tener en cuenta que, dado que las peticiones GET exponen datos en la URL, no son adecuadas para enviar información sensible o confidencial, ya que los parámetros son visibles para cualquiera que pueda ver la URL.

Implementar una petición GET con curl en PHP

En esta sección, aprenderá como inicializar sesiones curl, establecer la URL y otras opciones específicas, establecer parámetros específicos, enviar peticiones a recursos remotos, y manejar respuestas dentro de tus aplicaciones PHP.

Para seguir adelante, es necesario asegurarse de que su versión de PHP tiene soporte para curl. La mayoría de las instalaciones modernas de PHP vienen con curl habilitado por defecto, pero siempre es una buena idea verificar que lo tienes. Puede confirmar su versión y configuración de PHP utilizando la función phpinfo(). Para ello, cree una carpeta llamada php-curl, y en ella, cree un archivo llamado info.php. Pegue el siguiente código en el archivo:

<?php
phpinfo();

En su terminal, ejecute el comando php -S localhost:8000 y navegue hasta http://localhost:8000/info.php en su navegador. En la página web resultante, desplácese hasta la sección curl y confirme que el soporte curl está activado:

Implementar una petición GET con curl en PHP

Una vez que haya confirmado que curl está habilitado y antes de iniciar una sesión curl, es necesario crear un nuevo archivo llamado curl.php en la carpeta raíz de su proyecto. A continuación, añada el siguiente código a su nuevo archivo curl.php:

<?php
$ch = curl_init();

Esto inicia una sesión curl usando la función curl_init(). Esta función inicializa una nueva sesión de curl y devuelve una instancia de curl handle, una herramienta crucial para operaciones posteriores con curl, como establecer opciones y enviar peticiones.

Configurar la URL y otras opciones

Configurar las opciones de curl, incluyendo establecer la URL, es una parte crucial de hacer peticiones HTTP usando curl en PHP. Establece la base de la petición HTTP, determinando el servidor de destino, el tipo de petición que se está haciendo (GET, POST, etc.), y cualquier autenticación o parámetros necesarios.

PHP proporciona la función curl_setopt() que facilita la configuración de varias opciones para un gestor de sesión curl, y permite personalizar el comportamiento de la petición curl especificando diferentes parámetros y valores.

La función curl_setopt() tiene la forma curl_setopt(CurlHandle $handle, int $option, mixed $value). $handle es el “handle” devuelto por la función curl_init(), $option representa la opción específica que desea establecer, y $value representa el valor que desea establecer a la opción especificada.

Para establecer la URL, añada el siguiente código al archivo curl.php:

$url = "https://dummyjson.com/products";
curl_setopt($ch, CURLOPT_URL, $url);

Este código utiliza la función curl_setopt() para establecer la opción URL para el gestor de sesión curl. CURLOPT_URL es una constante que significa la opción de establecer la URL para la petición curl.

Ahora, exploremos algunas otras opciones que puede configurar.

Para configurar la opción curl para una experiencia de petición HTTP más controlada, añada el siguiente código al archivo curl.php:

// Set a timeout for the cURL request
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
// return the response from the server as a string instead of outputting it directly
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// avoid following redirects, if any
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);

En este código, CURLOPT_TIMEOUT se configura con un valor de 30, definiendo un tiempo máximo de ejecución de treinta segundos para la petición curl. Esto asegura que si la petición tarda más de treinta segundos, se agotará el tiempo de espera, evitando esperas prolongadas.

CURLOPT_RETURNTRANSFER se establece en true, indicando a curl que devuelva la respuesta del servidor como una cadena en lugar de mostrarla directamente. Esto le permite capturar y manipular los datos de respuesta dentro del script PHP.

Por último, CURLOPT_FOLLOWLOCATION se establece en false, indicando que curl no debe seguir automáticamente las redirecciones HTTP. Deshabilitando la redirección automática, el script retiene el control sobre el flujo de peticiones, permitiendo un manejo personalizado de las respuestas de redirección.

Puede encontrar más información sobre otras opciones que puede configurar en la documentación de PHP.

Ejecutar la petición GET

Para ejecutar la solicitud y ver la respuesta, añada el siguiente código al archivo curl.php:

// Execute the cURL request and capture the response
$response = curl_exec($ch);
// Check for cURL errors
if (curl_errno($ch)) {
   echo 'Curl error: ' . curl_error($ch);
} else {
   // Decode JSON response if it is a JSON string
   $decodedResponse = json_decode($response, true);
   // Check if decoding was successful
   if ($decodedResponse !== null) {
       // Output the JSON response to the UI
       header('Content-Type: application/json');
       echo json_encode($decodedResponse, JSON_PRETTY_PRINT);
   } else {
       // If the response is not valid JSON, echo it as plain text
       echo $response;
   }
}
// Close cURL session
curl_close($ch);

A continuación, vaya a http://localhost:8000/curl.php en su navegador, y cuando se cargue la página, debería obtener una matriz de productos en formato JSON:

Ejecutar la solicitud GET

Enviar una solicitud GET con parámetros

Para especificar parámetros en la URL, añada el siguiente código $url ="https://dummyjson.com/products";:

// Query parameters
$params = [
   'limit' => 2
];

// Construct the complete URL with query parameters
$url .= '?' . http_build_query($params);

En este código, define https://dummyjson.com/products como la URL base. Luego define un parámetro de consulta llamado limit con un valor de 2 en un array asociativo llamado $params. Para incorporar este parámetro a la URL, se utiliza la función http_build_query($params), que convierte la matriz asociativa en una cadena de consulta codificada en la URL. La cadena de consulta resultante se concatena con la URL original mediante un signo de interrogación, creando una URL completa con el parámetro de consulta especificado. La URL resultante tiene el siguiente aspecto "https://dummyjson.com/products?limit=2"

Para comprobarlo, vaya a http://localhost:8000/curl.php en su navegador y recargue la página. Debería obtener un array con sólo dos productos en formato JSON:

Enviar una solicitud GET con parámetros

Conclusión

En este artículo, demostramos cómo hacer peticiones GET usando curl en PHP. Entender los fundamentos de una petición GET forma la base para un intercambio de datos ágil.

Usando varias opciones de curl, los desarrolladores pueden personalizar sus peticiones GET, asegurando un control preciso sobre los tiempos de espera, gestionando redirecciones, y recibiendo respuestas como cadenas para su posterior manipulación. Esta flexibilidad permite a los desarrolladores afinar sus interacciones con los servidores web y garantiza una recuperación de datos eficiente y adaptada.

Para obtener más información sobre el uso de curl, consulte esta guía sobre el uso de curl con Python y este tutorial sobre el uso de curl con proxies.