También soporta certificados HTTPS, HTTP POST, HTTP PUT, subidas FTP, Kerberos, subidas mediante formulario HTTP, proxies, cookies, autentificación mediante usuario+contraseña (Basic, DIgest, NTLM y Negotiate para HTTP y kerberos4 para FTP), continuación de transferencia de archivos, tunneling de proxy http y muchas otras prestaciones lo que lo convierte en la auténtica navaja suiza.
Nosotros usaremos Curl con PHP aunque se puede trabajar como programa en un terminal pero no cumple los requisitos que nosotros queremos ya que mediante PHP podremos limpiar el resultado y manejarlo a nuestro antojo.
INSTALACIÓN
Primero de todo tienes que tener php5 y php5-cli para programar, compilar y ejecutar. Esto quedó explicado en ediciones anteriores. En cualquier caso para instalar curl ejecutaremos en un terminal:
- sudo apt-get install php5-curl
<?phpMuy bien, he comentado el código para que aprendáis el funcionamiento básico. Las opciónes de POST están comentadas pues no se usarán de momento pero es útil tenerlas a mano para cuando queramos intentar INYECCIONES.
$ch = curl_init('http://www.example.com');//Dirección
//curl_setopt ($ch, CURLOPT_POST, 1);//Para Enviar POST
//curl_setopt ($ch, CURLOPT_POSTFIELDS, "usuario=peter&contra=hola");//Define usuario y contraseña
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); //Para guardar en variable la salida
$salida= curl_exec ($ch);//Guardamos la salida en una variable
curl_close ($ch);//Cerramos conexión
echo $salida;
?>
El script abre la página example.com e imprime su código fuente. Si lo ejecutamos a través de servidor se verá la página y si lo ejecutamos a través del IDE se verá el código fuente.
DESCARGARSE TODA LA WIKIPEDIA
Para ello creamos una carpeta llamada Enciclopedia y guardamos nuestro copypaste.php que contendrá:
<?phpEjecutamos, lo dejamos días y se nos baja la wikipedia entera :)
/*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301, USA.
*/
while (true){//Bucle infinito!
$ch = curl_init('http://es.wikipedia.org/wiki/Especial:Aleatoria');
//curl_setopt ($ch, CURLOPT_POST, 1);
//curl_setopt ($ch, CURLOPT_POSTFIELDS, "contraseña='OR 1=1");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);//Para que siga las redirecciones.
$salida = curl_exec ($ch);
curl_close ($ch);
//Cogemos el título con expresión regular
preg_match("/(\<title>)(.)*(\<\/title>)/i", $salida, $resultados);
//Limpiamos el titulo para guardarlo
$nombre = $resultados[0];
$nombre = str_replace("<title>", "",$nombre);
$nombre = str_replace("- Wikipedia, la enciclopedia libre</title>", "",$nombre);
$nombre = str_replace(" ","_",$nombre);
$nombre = $nombre.".html";
if (!file_exists($nombre)){//No existe el archivo
//Quitamos gran parte de información basura
$salida = explode('<div id="content">',$salida);
$salida = '<div id="content">'.$salida[1];
$salida = explode('<div class="printfooter">',$salida);
$salida = $salida[0];
//Guardamos
$fp = fopen($nombre, 'w');
//Cabeceras para que no aparezcan códigos raros
fwrite($fp,'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es" dir="ltr">
<head>
<title>'. str_replace("_"," ",$nombre).'</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />');
fwrite($fp, $salida);
fwrite($fp,"</html>");
fclose($fp);
}
}
?>
DESCARGARSE TODO XKCD
XKCD es un WebComic muy popular, su construcción de URLS es muy sencilla por lo que nos puede resultar bastante sencillo. Para ello crearemos el archivo xkcd.php que contendrá:
<?php
/*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301, USA.
*/
for ($i=1; $i<=688; $i++){//Numero de comics
$ch = curl_init('http://xkcd.com/'.$i);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);//Para que siga las redirecciones.
$salida = curl_exec ($ch);
curl_close ($ch);
preg_match("/(http:\/\/imgs.xkcd.com\/comics\/)(.)*(\")/i", $salida, $resultados);
$imagen = $resultados[0];
$imagen = explode('"',$imagen);
$imagen = $imagen[0];
$ch = curl_init($imagen);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);//Para que siga las redirecciones.
$salida = curl_exec ($ch);
curl_close ($ch);
$imagen = str_replace("http://imgs.xkcd.com/comics/","",$imagen);
$fp = fopen($imagen, 'w');
fwrite($fp, $salida);
fclose($fp);
echo "guardado ".$i."\n";
}
?>
OTRAS OPCIONES
Curl tiene muchas opciones, hemos visto algunas de ellas, pero aquí tenéis el ARRAY completo con todas las opciones.
Ya sabéis, esto tiene muchísimas aplicaciones. Podéis hacer desde un navegador en PHP ha un cliente FTP pasando por actividades más divertidas como búsqueda y explotación de fallos.$options = array(
CURLOPT_RETURNTRANSFER => true, //Devuelve la transferencia a la variable
CURLOPT_HEADER => true, //Envia las cabeceras
CURLOPT_FOLLOWLOCATION => false, //Acepta redirecciones
CURLOPT_ENCODING => "", //Codificacion
CURLOPT_USERAGENT => "Mi Navegador; Mi Sistema Operativo!!)",
CURLOPT_AUTOREFERER => true,
CURLOPT_CONNECTTIMEOUT => 120,
CURLOPT_TIMEOUT => 120,
CURLOPT_MAXREDIRS => 10,
CURLOPT_POST => 2,
CURLOPT_POSTFIELDS => "$postfields", // datos post
CURLOPT_COOKIEFILE => "cookies.txt", // de donde leer cookies anteriormente guardadas
CURLOPT_COOKIEJAR => "cookies.txt" // en donde guardar cookies
);
No hay comentarios:
Publicar un comentario