Guía sobre cómo utilizar cURL en PHP

Por EducaciónIT
- 04/08/2023
5 minutos de lectura

cURL es una librería que permite realizar peticiones HTTP con el objetivo de transferir información con sintaxis de URL.
En el contexto de PHP, permite armar un script que literalmente se comporte como un navegador para así realizar una petición a otro servidor remoto.

Su utilidad es muy similar al objeto XMLHttpRequest de JavaScript en el sentido de comunicarse con un servidor distinto para la obtención de recursos, datos u otra información.

Cómo implementar cURL en PHP

En PHP se implementa como un conjunto de funciones, cuyas principales que más se usan son:

  • curl_init - Inicia una nueva sesión cURL
  • curl_setopt - Define opciones para nuestra sesion cURL
  • curl_getinfo - Obtiene información de la última transferencia
  • curl_exec - Ejecuta la petición HTTP
  • curl_close - Cierra la sesión CURL

Ejemplo:

<?php
	$cliente = curl_init();
	curl_setopt($cliente, CURLOPT_URL, "http://educacionit.com");
	curl_setopt($cliente, CURLOPT_HEADER, 0);
	curl_exec($cliente);
	curl_close($cliente);
?>

De este modo es que se obtiene via HTTP la página educacionit.com.

Pero si se quiere que el contenido que devuelve la página se almacene en una variable, se puede utilizar la opción CURLOPT_RETURNTRANSFER mediante la función curl_setopt:

<?php
	$cliente = curl_init();
	curl_setopt($cliente, CURLOPT_URL, "http://educacionit.com");
	curl_setopt($cliente, CURLOPT_HEADER, 0);
	curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 

	$contenido = curl_exec($cliente);
	curl_close($cliente);
?>

La clave está con definir las configuraciones adecuadas según el objetivo de la petición.

Algunas opciones de la función curl_setopt son:

  • CURLOPT_URL - Define la URL de la petición HTTP (Solamente esta opción es obligatoria, el resto son totalmente opcionales)
  • CURLOPT_PORT - Puerto alternativo
  • CURLOPT_FOLLOWLOCATION - True: Sigue cualquier encabezado "Location: ". Es false por defecto.
  • CURLOPT_COOKIE - Define las cookies que se van a enviar al servidor HTTP (por ejemplo: "cookie1=azul&cookie2=rojo;")
  • CURLOPT_COOKIEFILE - Nombre del fichero que contiene datos de las cookies. El fichero también puede estar en un servidor HTTP remoto.
  • CURLOPT_COOKIEJAR - Nombre del fichero donde guardar cookies internas cuando se cierre la conexión.
  • CURLOPT_REFERER - Contenido del Header "Referer: " para ser usado en la petición HTTP.
  • CURLOPT_USERAGENT - Nombre del navegador
  • CURLOPT_POST - True: Para hacer una petición HTTP-POST.
  • CURLOPT_POSTFIELDS - Es válido si CURLOPT_POST esta en true. Define los datos del POST (ejemplo: "usuario=daniel&password=12345;")
  • CURLOPT_HEADER - True: para incluir el header en el output.

Se puede encontrar la lista completa de opciones en: http://php.net/manual/es/function.curl-setopt.php

Adicionalmente se cuenta con la función curl_getinfo, la cual permite obtener información técnica de la petición que permita auditar el recurso solicitado y/o cualquier otro aspecto necesario.

Las opciones de la función curl_getinfo son:

  • CURLINFO_EFFECTIVE_URL - Última URL utilizada
  • CURLINFO_HTTP_CODE - Último código HTTP recibido
  • CURLINFO_FILETIME - Hora del documento remoto, si devuelve -1 la hora del documento es desconocida
  • CURLINFO_TOTAL_TIME - Tiempo total de la duración de última transación en segundos
  • CURLINFO_NAMELOOKUP_TIME - Tiempo en segundos que se tardó en resolver la ubicación del fichero
  • CURLINFO_CONNECT_TIME - Tiempo en segundos que se tardó en establecer la conexión
  • CURLINFO_PRETRANSFER_TIME - Tiempo en segundos desde el inicio justo antes de que empiece la transferencia
  • CURLINFO_STARTTRANSFER_TIME - Tiempo en segundos hasta que el primer byte está a punto de transferirse
  • CURLINFO_REDIRECT_TIME - Tiempo en segundos de todos los pasos de redireción antes que la última transación haya empezado
  • CURLINFO_SIZE_UPLOAD - Número total de bytes subidos
  • CURLINFO_SIZE_DOWNLOAD - Número total de bytes descargados
  • CURLINFO_SPEED_DOWNLOAD - Velocidad media de descarga
  • CURLINFO_SPEED_UPLOAD - Velocidad media de subida
  • CURLINFO_HEADER_SIZE - Tamaño total de los encabezados recibidos
  • CURLINFO_HEADER_OUT - La cadena de la petición enviada
  • CURLINFO_REQUEST_SIZE - Tamaño total de las peticiones realizadas, solamente para peticiones HTTP
  • CURLINFO_SSL_VERIFYRESULT - Resultado de la verificación del certificado SSL solicitado por la opción CURLOPT_SSL_VERIFYPEER
  • CURLINFO_CONTENT_LENGTH_DOWNLOAD - content-length de descarga, leído desde el campo Content-Length:
  • CURLINFO_CONTENT_LENGTH_UPLOAD - Tamaño especificado de subida
  • CURLINFO_CONTENT_TYPE - Content-Type: del objecto descargado, NULL indica que el servidor no envío un encabezado Content-Type: válido.

Ejemplos:

<?php
	//Buscar en google:
	$cliente = curl_init();
	curl_setopt($cliente, CURLOPT_URL, "https://www.google.com.ar/search?q=EducacionIT");
	curl_exec($cliente);
	curl_close($cliente);
?>
<?php
	//Iniciar sesion en una pagina web:
	$cliente = curl_init();
	curl_setopt($cliente, CURLOPT_URL, "http://www.miweb.com/login.php");
	curl_setopt($cliente, CURLOPT_POST, 1);
	curl_setopt($cliente, CURLOPT_POSTFIELDS, "usuario=daniel&password=12345;");
	curl_setopt($cliente, CURLOPT_COOKIEJAR, "cookies.txt");
	curl_exec($cliente);
	curl_close($cliente);
?>
<?php
	//Incluir las cabeceras en el output:
	$cliente = curl_init();
	curl_setopt($cliente, CURLOPT_URL, "http://www.miweb.com");
	curl_setopt($cliente, CURLOPT_HEADER, true);  
	curl_exec($cliente);
	curl_close($cliente);
?>
<?php
	//Mostrar las cabeceras del servidor HTTP junto al código HTML.
	$cliente = curl_init();
	curl_setopt($cliente, CURLOPT_URL, "http://www.miweb.com");
	curl_setopt($cliente, CURLOPT_HEADER, true);
	curl_setopt($cliente, CURLOPT_RETURNTRANSFER, 1);
	$respuesta = curl_exec($cliente);
	curl_close($cliente);
	$respuesta = explode("\n\r\n", $respuesta);
	$headers = $respuesta[0];
	$body = $respuesta[1];
	//En la variable headers se guardan los encabezados y en la variable body el código HTML.
?>

En definitiva, la librería cURL puede llegar a ser extremadamente útil en muchas ocasiones: crear scripts automáticos que entren en determinadas webs e interactúen por nosotros, recoger datos y guardarlos en una base de datos, indexar contenido de otras páginas estilo buscador, recoger todas las imágenes de una misma página... e infinitas utilidades para el envío/recepción de recursos distribuidos en Web Services.

Saber es hacer... Happy coding!


¿Buscas desarrollar tus capacidades, formándote en PHP? En EducaciónIT tenemos un curso para ti: Programación Web en PHP. Aquí dominarás la tecnología más utilizada para construir sitios y darás tus primeros pasos para convertirte en un Web Developer, aprendiendo las herramientas básicas necesarias para crear tu sitio en internet.

Categoría
Artículo escrito por: EducaciónIT

One comment on “Guía sobre cómo utilizar cURL en PHP”

  1. una pregunta como seria este ejemplo para un php 7 manejando el curl y direccionando a otro servidor por medio del metodo post

Deja un comentario