¿Cómo usar cURL en PHP?


Guadalupe

08 May 2023

¿Estás aprendiendo a usar PHP desde cero? Entonces, este artículo es para ti. Hoy vamos a explorar la extensión cURL en PHP, la cual te permite hacer peticiones HTTP desde tu código. A menudo necesitas comunicarte con sitios web externos en tu desarrollo PHP diario. Ya sea llamando a APIs REST de terceros para obtener datos o descargando recursos de un sitio web externo, querrás una librería que te permita hacerlo sin esfuerzo.

cURL son las siglas de client URLs, y es una librería que te permite enviar y recibir información con la sintaxis URL. De hecho, aprovecha la biblioteca libcurl que te permite conectar y comunicar con muchos tipos diferentes de servidores con muchos tipos diferentes de protocolos.

Además de HTTP y HTTPS, la librería libcurl también soporta protocolos como FTP, Gopher, Telnet, DICT, File y LDAP. En este artículo, veremos un par de ejemplos del mundo real para demostrar cómo se pueden usar las funciones cURL en PHP. ¡Comencemos!

¿Cómo descargar archivos usando cURL en PHP?

descargar archivos curl php coders free

Leer o descargar archivos remotos es uno de los casos de uso más comunes para cURL. Esto se logra mediante una solicitud GET cURL, lo cual discutiremos en esta sección. Sigue adelante y crea el archivo curl_read_file.php con el siguiente contenido.

<?php
$url = 'https://www.example.com';
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HEADER, false);
$data = curl_exec($curl);
curl_close($curl);

En el ejemplo anterior, hemos utilizado funciones cURL para leer la página de inicio del dominio example.com. Repasemos los fragmentos importantes para entender cómo funciona. En primer lugar, hemos utilizado la función curl_init para inicializar una nueva sesión cURL. La variable $curlHandle contiene un handle cURL, que podemos utilizar para establecer varias opciones para la transferencia cURL con la ayuda de la función curl_setopt.

Cuando estés trabajando con cURL, la función curl_setopt es con la que más vas a tratar, ya que te permite inicializar varias opciones de petición CURLOPT_*. La función curl_setopt toma tres argumentos: un handle de cURL, la opción CURLOPT_XXX, y el valor de la opción CURLOPT_XXX.

A continuación, hemos utilizado la opción CURLOPT_URL para establecer la URL de la petición a ejemplo.com con la función curl_setopt. Además, hemos establecido la opción CURLOPT_RETURNTRANSFER a TRUE ya que queremos inicializar la respuesta en la variable $responseData.

Si no la ponemos a TRUE, la respuesta se mostrará directamente en la pantalla. Luego, hemos establecido la opción CURLOPT_HEADER en FALSE para omitir la información de cabecera en la salida. Por último, hemos utilizado la función curl_exec para ejecutar la petición cURL. Si todo va bien, la variable $responseData debería contener la fuente de la página de inicio de ejemplo.com.

Te puede interesar: ¿Qué es Laravel Eloquent ORM y Query Builder?

¿Cómo publicar datos usando cURL en PHP?

En esta sección, veremos cómo publicar datos con cURL. También, vamos a crear el archivo curl_post_example.php con el siguiente contenido.

<?php
$url = '{POST_REST_ENDPOINT}';
$curl = curl_init();
$fields = array(
    'field_name_1' => 'Value 1',
    'field_name_2' => 'Value 2',
    'field_name_3' => 'Value 3'
);
$fields_string = http_build_query($fields);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, TRUE);
curl_setopt($curl, CURLOPT_POSTFIELDS, $fields_string);
$data = curl_exec($curl);
curl_close($curl);

En el ejemplo anterior, asumimos que necesitamos enviar una solicitud con el método HTTP POST. De hecho, funciona de forma similar al envío de un formulario con el método POST. La variable $fields contiene un array de valores que necesitamos enviar como datos POST.

A continuación, hemos utilizado la función http_build_query para preparar una cadena de consulta codificada como URL. Luego, hemos establecido la opción CURLOPT_POST en TRUE para establecer el método de solicitud en HTTP POST.

Además, tenemos que utilizar la opción CURLOPT_POSTFIELDS para establecer los datos POST que queremos enviar junto con la solicitud. Finalmente, hemos utilizado la función curl_exec para ejecutar la petición cURL. De esta manera, puedes hacer una petición POST cURL.

¿Cómo enviar datos JSON usando cURL en PHP?

enviar datos json curl php coders free

Muy a menudo, necesitarás enviar datos JSON en una petición cURL POST. En esta sección, veremos cómo enviar datos JSON con el método POST en una petición cURL. Como se trata de una petición POST, vamos a revisar el ejemplo que acabamos de ver en la sección anterior. Sigue adelante y crea el archivo curl_post_json.php con el siguiente contenido.

<?php
$url = '{POST_REST_ENDPOINT}';
$curl = curl_init();
$fields = array(
    'field_name_1' => 'Value 1',
    'field_name_2' => 'Value 2',
    'field_name_3' => 'Value 3'
);
$json_string = json_encode($fields);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, TRUE);
curl_setopt($curl, CURLOPT_POSTFIELDS, $json_string);
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type:application/json'));
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true );
$data = curl_exec($curl);
curl_close($curl);

Aunque pueda parecer similar al ejemplo de la sección anterior, lo importante es que hemos utilizado la función json_encode para crear una cadena JSON a partir de la matriz $fields. A continuación, hemos utilizado la opción CURLOPT_HTTPHEADER para establecer la cabecera Content-Type en application/json para informar al servidor de la API de que estamos enviando datos JSON.

La cabecera Content-Type es útil para enviar datos en distintos formatos. Por ejemplo, si quisieras enviar datos XML, tendrías que establecer la cabecera Content-Type en application/xml. Excepto por eso, es prácticamente igual que el de la petición POST normal.

De esta forma, puedes enviar diferentes tipos de datos estableciendo la cabecera Content-Type apropiada. Si no establece la cabecera Content-Type, utilizará application/x-www-form-urlencoded como valor por defecto.

Te puede interesar: Descubre 7 trucos para usar mejor JavaScript

¿Cómo subir archivos usando cURL en PHP?

En esta sección, discutiremos cómo subir archivos con cURL. Para ello, vamos a crear el archivo curl_post_file.php con el siguiente contenido.

<?php
$url = '{POST_REST_ENDPOINT}';
$curl = curl_init();
if (function_exists('curl_file_create')) {
  $fileAttachment = curl_file_create('/absolute/path/to/file/');
} else {
  $fileAttachment = '@' . realpath('/absolute/path/to/file/');
}
$fields = array(
    'field_name_1' => 'Value 1',
    'field_name_2' => 'Value 2',
    'field_name_3' => 'Value 3',
    'uploaded_file' => $fileAttachment
);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, TRUE);
curl_setopt($curl, CURLOPT_POSTFIELDS, $fields);
curl_setopt($curl, CURLOPT_RETURNTRANSFER,1);
$data = curl_exec($curl);
curl_close($curl);

Cuando quieras subir un archivo, necesitas crear un objeto CURLFile en primer lugar. A partir de PHP 5.5, es bastante fácil crearlo, ya que solo necesitas usar la función curl_file_create para crear un objeto CURLFile. El primer argumento de la función curl_file_create es la ruta absoluta del archivo que deseas subir.

Si todavía estás usando una versión antigua de PHP, lo cual no es recomendable, hemos usado la sintaxis fallback '@' . realpath('/absoluto/ruta/al/archivo/') para crear un enlace al archivo.

Por último, hemos definido el encabezado Content-Type como multipart/form-data, ya que se trata de una solicitud POST de formulario multiparte. Aparte de ello, es una petición POST cURL rutinaria.

¡Hasta aquí llegamos con los métodos cURL que se usan frecuentemente en PHP! Como ves, esta extensión te puede ayudar a hacer peticiones HTTP desde tu código y mucho más. ¡Esperamos que esta información te haya sido de ayuda!

¿Te gustaría aprender a programar? En Coders Free contamos con diversos cursos online con todos los niveles de programación, así como servicios de diseño gráfico para hacer crecer tu negocio. ¡Contáctanos para obtener más información!


0 comentarios

Inicia sesión para comentar