cURL y PHP: hacer una llamada a una página en segundo plano

Hace un par de días os hablaba de cURL. Hoy vamos a ver un sencillo ejemplo con esta librería.

En este ejemplo, vamos a conectarnos desde nuestro servidor con Google y vamos a pedirle que nos busque resultados que contengan la palabra ‘curl’:

<?
if(function_exists('curl_init')) // Comprobamos si hay soporte para cURL
{
	$ch = curl_init();
	curl_setopt($ch, CURLOPT_URL,
		"http://www.google.es/search?hl=es&q=curl");
	curl_setopt($ch, CURLOPT_TIMEOUT, 30);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
	curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
	$resultado = curl_exec ($ch);
 
	print_r($resultado);
}
else
	echo "No hay soporte para cURL";
?>

Lo primero que debemos hacer es iniciar la sesión cURL:

$ch = curl_init();

esto nos devuelve un “manejador” $ch que identifica a la sesión cURL recién creada.

Ahora vamos a indicarle cuál es la URL a la que nos queremos conectar:

curl_setopt($ch, CURLOPT_URL,
		"http://www.google.es/search?hl=es&q=curl");

En este caso vamos a realizar una búsqueda en google sobre el término ‘curl’.

Establecemos un tiempo máximo de respuesta:

curl_setopt($ch, CURLOPT_TIMEOUT, 30);

Esta línea la veremos más abajo:

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

Si en el servidor al que nos conectamos hubiese alguna redirección (código 302) y nos interesa seguirla entonces debemos decírselo a cURL:

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

En este caso no es necesario, pero lo he dejado como nota didáctica.

Finalmente hacemos la llamada:

$resultado = curl_exec ($ch);

Como hemos establecido el parámetro CURLOPT_RETURNTRANSFER, curl_exec va a devolver la respuesta del servidor y la va a almacenar en la variable $resultado. Si no hubiésemos establecido ese parámetro curl_exec hubiese devuelto verdadero o falso dependiendo de si la operación se ha realizado con éxito.

Este es un ejemplo muy sencillo sin valor más allá del didáctico, pero puede tener muchas aplicaciones. Por ejemplo se puede usar en pasarelas de pago como PayPal para hacer una llamada en segundo plano al servidor.

libCurl en PHP

libCurl es una biblioteca (o, como suele decirse: librería) para la transferencia de archivos que soporta varios protocolos (FTP, FTPS, HTTP, HTTPS, SCP, SFTP, TFTP, TELNET, DICT, LDAP, LDAPS y FILE).

Lo más habitual es que el soporte para cURL venga “de serie” en una instalación PHP. Si no es así tienes dos opciones:

1) Compilar el PHP añadiendo el soporte para cURL (necesitas tener la librería libCurl instalada antes de compilar el PHP). Aquí tienes instrucciones en inglés sobre cómo compilar PHP con soporte cURL.

2) Instalar el paquete php5-curl de tu distribución Linux (el nombre del paquete puede variar).

En algunas versiones tendrás que editar el fichero php.ini y modificar la línea:

;extension=php_curl.so

quitando el símbolo ‘;’ y dejarla así:

extension=php_curl.so

En otras basta con asegurarse que tenemos el fichero curl.so en el directorio:

/usr/lib/php5/extensions

Eso sí, una vez añadido el soporte para cURL deberemos reiniciar Apache:

/etc/init.d/apache restart

¿Cómo puedo comprobar si cURL está disponible en mi instalación Apache/PHP?

Puedes probarlo con el siguiente código:

<?php
if(function_exists('curl_init'))
   echo "Hay cURL";
?>

o puedes hacerlo con la función:

que te mostrará esta y otras valiosas informaciones sobre tu servidor.

En una próxima entrega veremos un ejemplo de trabajo con cURL.