Comunidad PHPeros

Lenguajes => PHP => Tutoriales PHP => Mensaje iniciado por: marco811 en 19 de Abril de 2010, 11:23:25 am

Título: Tutorial de como se utiliza CURL en PHP
Publicado por: marco811 en 19 de Abril de 2010, 11:23:25 am
Buenas, en este post os voy a explicar el funcionamiento de la clase CURL, muy útil para hacer peticiones personalizadas con el protocolo HTTP.
Esta clase tiene estas principales funciones que mas se usan:
Os voy a mostrar un ejemplo para que os orientéis un poco:


<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.example.com/");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
curl_exec($ch);
curl_close($ch);
?>


De este modo nos muestra la pagina www.example.com.

Pero si queremos que el output que devuelve la pagina se almacene en una variable,

podemos utilizar la opción CURLOPT_RETURNTRANSFER mediante la función curl_setopt

<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.example.com/");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$xxx = curl_exec($ch);
curl_close($ch);
?>



Algunas opciones de la función curl_setopt:

Solamente la opción CURLOPT_URL es obligatoria, el resto son totalmente opcionales
Podéis encontrar la lista completa de opciones en php.net (http://es2.php.net/manual/es/function.curl-setopt.php)

Todas las opciones de la función curl_getinfo (esta funcion no se usa mucho):


Ejemplos:

Buscar en google:

<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.google.es/search?q=PHPeros");
curl_exec($ch);
curl_close($ch);
?>

Iniciar sesion en una pagina web:

<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.web.com/login.php");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "usuario=marco&password=12345;");
curl_setopt($ch, CURLOPT_COOKIEJAR, "cookies.txt");
curl_exec($ch);
curl_close($ch);
?>


Cambiar nombre navegador:

<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.example.com");
url_setopt($ch, CURLOPT_USERAGENT, 'Googlebot/2.1 (+http://www.google.com/bot.html)');
curl_exec($ch);
curl_close($ch);
?>


Incluir las cabeceras en el  output:

<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.example.com");
curl_setopt($ch, CURLOPT_HEADER, true); 
curl_exec($ch);
curl_close($ch);
?>

De esta forma se nos mostrara las cabeceras del servidor HTTP junto al código HTML. Como se podrían separar las cabeceras del código html? De la siguiente forma:

<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.example.com");
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$xxx = curl_exec($ch);
curl_close($ch);
$xxx = explode("\n\r\n", $xxx);
$headers = $xxx[0];
$body = $xxx[1];
?>

En la variable headers se guardan los encabezados y en la variable body el código HTML.


Otro ejemplo es almacenar las cookies que se devuelve por el servidor HTML en un archivo con la opción COOKIEJAR:

<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://m.tuenti.com");
curl_setopt($ch, CURLOPT_COOKIEJAR, "cookies.txt");
curl_exec($ch);
curl_close($ch);
?>


Bueno, esto es todo, si tenéis alguna duda o petición porfavor preguntármelo.
Un saludo!
Título: Re:Tutorial de como se utiliza CURL en PHP
Publicado por: javipilo en 19 de Abril de 2010, 12:28:20 pm
Fantástico tutorial enhorabuena  :)
Título: Re:Tutorial de como se utiliza CURL en PHP
Publicado por: Focux en 19 de Abril de 2010, 21:24:29 pm
Ya sabía sobre los curls, es mil veces mejor que file_get_contents(), además de que es más  veloz, es más eficaz.
Título: Re:Tutorial de como se utiliza CURL en PHP
Publicado por: marco811 en 19 de Abril de 2010, 21:35:45 pm
Ya sabía sobre los curls, es mil veces mejor que file_get_contents(), además de que es más  veloz, es más eficaz.
Depende de lo que quieras hacer :) Y es igual de veloz jeje
Título: Re:Tutorial de como se utiliza CURL en PHP
Publicado por: westwest en 19 de Abril de 2010, 21:55:00 pm
Depende de lo que quieras hacer :) Y es igual de veloz jeje
Ni por asomo
Título: Re:Tutorial de como se utiliza CURL en PHP
Publicado por: marco811 en 19 de Abril de 2010, 22:19:09 pm
Ni por asomo
Por que? sigue siendo una peticion HTTP, puede que mas rapida ya que no tiene que procesar muchas lineas de codigo.
Un saludo!
Título: Re:Tutorial de como se utiliza CURL en PHP
Publicado por: naveda en 22 de Abril de 2010, 00:14:13 am
Vaya pasada de tutorial, muy claro y completo, mi enhorabuena marco811!
Título: Re:Tutorial de como se utiliza CURL en PHP
Publicado por: marco811 en 22 de Abril de 2010, 08:08:04 am
Vaya pasada de tutorial, muy claro y completo, mi enhorabuena marco811!
Gracias naveda :D aunque le faltan un par de ejemplos jeje
Título: Re:Tutorial de como se utiliza CURL en PHP
Publicado por: Physlet en 24 de Abril de 2010, 22:58:31 pm
¿De qué forma puedo logearme en una página usando cURL?
Es decir que en link salga algo como http://tupagina.es/index.php?user=Nombre&pass=MiPass y logearlo con cURL.
Título: Re:Tutorial de como se utiliza CURL en PHP
Publicado por: marco811 en 24 de Abril de 2010, 23:03:52 pm
¿De qué forma puedo logearme en una página usando cURL?
Es decir que en link salga algo como http://tupagina.es/index.php?user=Nombre&pass=MiPass y logearlo con cURL.
Si es una peticion GET pones eso en la opcion CURLOPT_URL.
:)
Título: Re:Tutorial de como se utiliza CURL en PHP
Publicado por: Physlet en 25 de Abril de 2010, 00:04:23 am
Si es una peticion GET pones eso en la opcion CURLOPT_URL.
:)
Y luego de esto puedo manejar la web usando explode() y cosas por el estilo para extraerle contenido estando logeado?
Título: Re:Tutorial de como se utiliza CURL en PHP
Publicado por: marco811 en 25 de Abril de 2010, 00:39:44 am
Y luego de esto puedo manejar la web usando explode() y cosas por el estilo para extraerle contenido estando logeado?
Exacto, pero para hacer eso necesitas guardar el contenido en una variable, y para eso es obligatorio usar CURLOPT_RETURNTRANSFER

<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.example.com/");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$xxx = curl_exec($ch);
curl_close($ch);
?>
Título: Re:Tutorial de como se utiliza CURL en PHP
Publicado por: Physlet en 25 de Abril de 2010, 03:42:56 am
Exacto, pero para hacer eso necesitas guardar el contenido en una variable, y para eso es obligatorio usar CURLOPT_RETURNTRANSFER

<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.example.com/");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$xxx = curl_exec($ch);
curl_close($ch);
?>
No me sirvió... Simplemente no me muestra nada ;s
Título: Re:Tutorial de como se utiliza CURL en PHP
Publicado por: marco811 en 25 de Abril de 2010, 09:58:35 am
No me sirvió... Simplemente no me muestra nada ;s
Has puesto la funcion echo para que te lo muestre por pantalla?  >:(
Título: Re:Tutorial de como se utiliza CURL en PHP
Publicado por: Physlet en 25 de Abril de 2010, 22:32:47 pm
Has puesto la funcion echo para que te lo muestre por pantalla?  >:(
Yes... Probé con el de habbo que fue el primero que se me vino a la mente. Esto hice:

<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://www.habbo.es/account/submit?credentials.username=HABBO&credentials.password=CONTRA");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$xxx = curl_exec($ch);
echo $xxx;
curl_close($ch);


?>
Título: Re:Tutorial de como se utiliza CURL en PHP
Publicado por: marco811 en 25 de Abril de 2010, 22:45:14 pm
hmmm, estas usando el metodo GET y el login de habbo usa el metodo POST, claro que no te funcione
Título: Re:Tutorial de como se utiliza CURL en PHP
Publicado por: Siquillote en 26 de Abril de 2010, 13:31:30 pm

Yo tenia entendido que CURL se usaba para dar ordenes a un cierto tiempo, por ejemplo :
Si son las 00:00 se hace una mysql_query() ¿No es cierto?.
Título: Re:Tutorial de como se utiliza CURL en PHP
Publicado por: marco811 en 26 de Abril de 2010, 15:34:37 pm
Yo tenia entendido que CURL se usaba para dar ordenes a un cierto tiempo, por ejemplo :
Si son las 00:00 se hace una mysql_query() ¿No es cierto?.
No  :D Te equivocas xd
Título: Re:Tutorial de como se utiliza CURL en PHP
Publicado por: Physlet en 26 de Abril de 2010, 23:41:58 pm
hmmm, estas usando el metodo GET y el login de habbo usa el metodo POST, claro que no te funcione
Explícame como hacerlo, que estoy en 0 xD
Título: Re:Tutorial de como se utiliza CURL en PHP
Publicado por: marco811 en 27 de Abril de 2010, 10:11:00 am
para utilizar el metodo POST, necesitas usar las siguientes opciones:
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "usuario=marco&password=12345;");
Un saludo
Título: Re:Tutorial de como se utiliza CURL en PHP
Publicado por: Warlox en 28 de Abril de 2010, 19:45:12 pm
A todo esto, ¿para qué se utiliza CURL?

(Siento si es una pregunta estúpida, pero no entendí  :-[)
Título: Re:Tutorial de como se utiliza CURL en PHP
Publicado por: marco811 en 28 de Abril de 2010, 19:54:24 pm
A todo esto, ¿para qué se utiliza CURL?

(Siento si es una pregunta estúpida, pero no entendí  :-[ )
si no entiendes lo de arriba  no se como explicartelo.
Título: Re:Tutorial de como se utiliza CURL en PHP
Publicado por: Siquillote en 30 de Abril de 2010, 11:47:54 am
A todo esto, ¿para qué se utiliza CURL?

(Siento si es una pregunta estúpida, pero no entendí  :-[)

Yo pensaba que CURL se usaba para dar "ordenes" para realizar una determinada tarea en un cierto tiempo. Pero marco me dijo que no y por
mas que trato de leerlo y asimilarlo me deja  ???. Lo unico que he llegado a entender es que sirve para personalizar el protocolo HTTP, es decir,
que puedes modificar tu estilo de navegación. Eso es lo que he llagado a entender pero no se si estará bien.
Título: Re:Tutorial de como se utiliza CURL en PHP
Publicado por: marco811 en 30 de Abril de 2010, 12:25:36 pm
Exacto, sirve para hacer peticiones HTTP personalizadas. Y lo de realizar una determinada tarea en un cierto tiempo es casi imposible (por no decir imposible) en PHP ya que los archivos PHP solamente se ejecutan a la peticion del usuario, se necesitaria una tarea del S.O que haga la peticion a PHP.
Digo casi imposible porque si que hay posibilidades , una de ella es ejecutar un archivo PHP al infinito y con un bucle extraer de la base de datos las tareas y ejecutarlas cuando llegue la hora.

<?php
set_time_limit(0);
while(true) {
//bucle infinito
}
?>

Pero hay un inconveniente: el script se para al caerse el servidor apache y habria que volver a ejecutarlo.
Un saludo.
Título: Re:Tutorial de como se utiliza CURL en PHP
Publicado por: Warlox en 01 de Mayo de 2010, 00:13:50 am
Aaah si si ya entendí bien.

Sólo una duda: ¿con este método es como algunos programas (TweetDeck, Gwibber...) inician sesión en Twitter?
Título: Re:Tutorial de como se utiliza CURL en PHP
Publicado por: marco811 en 01 de Mayo de 2010, 00:19:50 am
Creo que si, pero mucho mas avanzado y utlizando muchas otras librerias
Título: Re:Tutorial de como se utiliza CURL en PHP
Publicado por: Warlox en 01 de Mayo de 2010, 00:31:19 am
Ahh ok ok. No obstante, si quiero crear una API de Twitter a nivel web, creo que sí debería usar sólo el cURL, ¿no?
Título: Re:Tutorial de como se utiliza CURL en PHP
Publicado por: Physlet en 01 de Mayo de 2010, 07:22:26 am
Si por ejemplo no se puede realizar una conexión mediante cURL, de qué manera puedo mostrar un mensaje de error así tipo "No se pudo conectar". ¿?
Título: Re:Tutorial de como se utiliza CURL en PHP
Publicado por: westwest en 01 de Mayo de 2010, 11:56:59 am
Ahh ok ok. No obstante, si quiero crear una API de Twitter a nivel web, creo que sí debería usar sólo el cURL, ¿no?
Twitter tiene su propia API...

Si por ejemplo no se puede realizar una conexión mediante cURL, de qué manera puedo mostrar un mensaje de error así tipo "No se pudo conectar". ¿?

Pues si la variable donde usaste el curl_exec es false, es que ha fallado, por lo tanto:

// definimo opciones...
$curl = curl_exec($init);
if(!$curl) { echo 'Falló...';
} else {
echo 'Se ha ejecutado perfectamente';
}
Título: Re:Tutorial de como se utiliza CURL en PHP
Publicado por: Focux en 08 de Mayo de 2010, 15:32:55 pm
Estaba probando lo de enviar peticiones http y quize logearme en un sitio y no me funcione, este es el codigo que tengo.

<?php
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "http://www.habbo.es");
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, "credentials.username=aquieluser&credentials.password=aquilapass;");
curl_exec($curl);
curl_close($curl);
?>
---- RESUELTO
Título: Re:Tutorial de como se utiliza CURL en PHP
Publicado por: Physlet en 08 de Mayo de 2010, 17:52:27 pm
Anda, focux creí que era yo el único xD
Título: Re:Tutorial de como se utiliza CURL en PHP
Publicado por: westwest en 08 de Mayo de 2010, 17:59:36 pm
A ver, focux...
curl_setopt($curl, CURLOPT_URL, "http://www.habbo.es");
en esa URL no se procesa ningun formulario:
curl_setopt($curl, CURLOPT_URL, "https://www.habbo.es/account/submit");
así debería ser
Título: Re:Tutorial de como se utiliza CURL en PHP
Publicado por: Focux en 08 de Mayo de 2010, 18:52:11 pm
Ya lo resolvi, hize este para paypal.
Título: Re:Tutorial de como se utiliza CURL en PHP
Publicado por: kenshin en 07 de Marzo de 2014, 16:51:20 pm
Buenísimo el tutorial. Una pregunta que tengo:

Quiero meterme en una pagina web y pulsar un boton que me permite descargarme un excel. Cómo podría hacerlo?

Muchas gracias de antemano. ^^