Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 

Consulta sobre URL
Ir a página 1, 2  Siguiente
 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Intermedio
Mensaje Lun Abr 14, 2008 3:30 pm
situ
Perlero Frecuente
Perlero Frecuente
Registrado: 09 Abr 2007
Mensajes: 146
Consulta sobre URL Responder citando

Los molesto porque estoy intentando terminar un script, el cual lo que hace es buscar en una url la palabra "marcos".

Prueba las siguientes urls:
Código:
http://localhost/legajo.php/legajos.txt
http://localhost/legajos.php/legajos.txt

Hasta ahí anda todo, pero me gustaría poder hacer que busque en varios archivos la palabra "marcos"; en este momento está seteado solamente "legajos.txt", pero tengo un archivo el cual dentro contiene el nombre de varios archivos que tendría que buscar esta palabra.
Probé hacer un array leyendo este archivo pero no me funcionó.
Gracias.

Perl:
#!/usr/bin/perl
use HTTP::Request;
use LWP::UserAgent;

$host='http://localhost/';
$string="marcos";
$archi='legajos.txt';
$pagina1="legajo.php";
$pagina2="legajos.php";

for ($i=1;$i<3;$i++) {
    $cont=pagina.$i;
    chomp $cont;

    $webs=$host.$$cont."$archi";

    my $req=HTTP::Request->new(GET=>$webs);

    my $ua=LWP::UserAgent->new();

    $ua->timeout(30);

    my $response=$ua->request($req);

    if ($response->is_success) {
        if( $response->content =~ /$string/) {
            print "$webs";
        }
    }
}


Ultima edición por situ el Lun Abr 14, 2008 4:05 pm, editado 1 vez
Mensaje Lun Abr 14, 2008 3:57 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4222
Ubicación: Valladolid, España
Responder citando

Humm... ¿qué es lo que hace la función vuln()?
Mensaje Lun Abr 14, 2008 4:05 pm
situ
Perlero Frecuente
Perlero Frecuente
Registrado: 09 Abr 2007
Mensajes: 146
Responder citando

Perdón, me confundí en el código, ya que subí un mirror al script que tengo en mi trabajo.
Gracias
Mensaje Lun Abr 14, 2008 4:09 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4222
Ubicación: Valladolid, España
Responder citando

Bien... ¿Qué hace la función pagina()?
Mensaje Lun Abr 14, 2008 4:13 pm
situ
Perlero Frecuente
Perlero Frecuente
Registrado: 09 Abr 2007
Mensajes: 146
Responder citando

Lo que hace es generar una variable con el contenido de $pagina.i donde "i" es el número de la variable, en mi caso tengo:
Perl:
$pagina1="legajo.php";
$pagina2="legajos.php";


Dando así:
Perl:
$webs=$host.$$cont."$archi";

que sería algo como :
Perl:
$webs=$hosts.$pagina1."$archi";
o
$webs=$hosts.$pagina2."$archi";

ya que es un for.
Mensaje Lun Abr 14, 2008 5:13 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4222
Ubicación: Valladolid, España
Responder citando

Vaya... ¿y no es más fácil usar un array?

Y, además, el URL que sale de $webs=$hosts.$pagina1."$archi"; es 'http://localhost/legajo.phplegajos.txt'.

Te falta el carácter '/'.

Perl:
#!/usr/bin/perl
use HTTP::Request;
use LWP::UserAgent;

$host    = 'http://localhost';
$string  = "marcos";
$archi   = 'legajos.txt';
@paginas = qw( legajo.php legajos.php );

for ($i = 0; $i <= @paginas; $i++) {

    $webs = "$host/$paginas[$i]/$archi";

    # ...

}


Item más...
Perl:
foreach $pagina ( @paginas ) {

    $webs = "$host/$pagina/$archi";

    # ...

}
Mensaje Lun Abr 14, 2008 5:15 pm
situ
Perlero Frecuente
Perlero Frecuente
Registrado: 09 Abr 2007
Mensajes: 146
Responder citando

¡Ah!, muchas gracias.

Consulta: cómo puedo hacer para que la variable $arch sea un array conteniendo lo que tengo dentro de un archivo con nombre "file.txt", ya que en realidad tengo varios archivos donde buscar.

Gracias.
Mensaje Lun Abr 14, 2008 5:22 pm
kidd
Creador de Perl en Español
Creador de Perl en Español
Registrado: 15 Oct 2003
Mensajes: 1390
Ubicación: México
Responder citando

Considerando que tengas un archivo llamado lista_de_archivos.txt y cuyo contenido sea similar a:

Código:
file.txt
file2.txt
file3.txt


Entonces podrías usar el siguiente código:

Perl:
#!/usr/bin/perl

use warnings;
use strict;
use HTTP::Request;
use LWP::UserAgent;

my $host = 'http://localhost';
my $string = "marcos";

#Lista de paginas en un array, así es fácil agregar más páginas
my @paginas = ("legajo.php","legajos.php");

#Abrimos el archivo con la lista de archivos a leer
open my $FILE, '<', 'lista_de_archivos.txt' or die $!;
my @archivos = <$FILE>;
close $FILE;


#Creamos nuestro objeto LWP
my $ua = LWP::UserAgent->new();
$ua->timeout(30);

#Iteramos en cada archivo
for my $archivo(@archivos){
    chomp $archivo;

    #Iteramos en cada pagina
    for my $pagina(@paginas){

        #Armamos el url
        my $url = join "/", $host, $pagina, $archivo;

        #Creamos un nuevo request
        my $req = HTTP::Request->new(GET=>$url);

        my $response = $ua->request($req);

        if ($response->is_success) {
            if( $response->content =~ /$string/mi ) {
                print "$url\n";
            }
        }

    }

}


Limpié el código bastante, y de una vez te puse para que usaras un array.

Saludos
Mensaje Lun Abr 14, 2008 5:38 pm
situ
Perlero Frecuente
Perlero Frecuente
Registrado: 09 Abr 2007
Mensajes: 146
Responder citando

Mil gracias por todo.
Mensaje Mar Abr 15, 2008 8:46 am
situ
Perlero Frecuente
Perlero Frecuente
Registrado: 09 Abr 2007
Mensajes: 146
Responder citando

Le agregué para que me guarde el reporte en HTML pero solamente me guarda el primer archivo encontrado y no los demás :S.

Perl:

#!/usr/bin/perl

use warnings;
use strict;
use HTTP::Request;
use LWP::UserAgent;

my $host = 'http://localhost';
my $string = "marcos";

#Lista de paginas en un array, así es fácil agregar más páginas
my @paginas = ("legajo.php","legajos.php");

#Abrimos el archivo con la lista de archivos a leer
open my $FILE, '<', 'lista_de_archivos.txt' or die $!;
my @archivos = <$FILE>;
close $FILE;


# Abro el archivo que sera el reporte final
open (F,">> reporte.html");
print F "<html><head>\n";
print F "<meta http-equiv=Content-Type content='text/html;charset=iso-8859-1' />\n";
print F "<title>marcos archivos</title>\n";
print F "</head>\n";
print F "<body>\n";
print F " <table border='0' align=center width=650 cellpadding='0' cellspacing='0' bgcolor=#333333>\n";
print F "  <tr><td bgcolor=#6666ff><font color=#ffffff face=Verdana size=1>Informacion</font></td></tr>\n";
print F "  <tr><td><font color=#ffffff face=Verdana size=1><strong>Host:</strong> $host</font></td></tr>\n";
print F "  <tr><td><font color=#ffffff face=Verdana size=1><strong>String:</strong> $string</font></td></tr>\n";
print F "  <tr><td><font color=#ffffff face=Verdana size=1><strong>Reporte:</strong> reporte.html</font></td></tr>\n";



#Creamos nuestro objeto LWP
my $ua = LWP::UserAgent->new();
$ua->timeout(30);

#Iteramos en cada archivo
for my $archivo(@archivos){
    chomp $archivo;

    #Iteramos en cada pagina
    for my $pagina(@paginas){

        #Armamos el url
        my $url = join "/", $host, $pagina, $archivo;

        #Creamos un nuevo request
        my $req = HTTP::Request->new(GET=>$url);

        my $response = $ua->request($req);

        if ($response->is_success) {
            if( $response->content =~ /$string/mi ) {
 #Cerramos el reporte
print F "  <tr><td bgcolor=#6666ff><font color=#ffffff face=Verdana size=1>archivos:\</font></td></tr>\n";
print F "  <tr><td><font color=#ffffff face=Verdana size=1>$url\n</font></td></tr>\n";
print F "  </table></body></html>\n";
close (F);
            }
        }

    }

}


Saludos
Mensaje Mar Abr 15, 2008 9:12 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4222
Ubicación: Valladolid, España
Responder citando

Claro, tienes puesto el '</html>' y el close() dentro del bucle...
Mensaje Mar Abr 15, 2008 10:11 am
situ
Perlero Frecuente
Perlero Frecuente
Registrado: 09 Abr 2007
Mensajes: 146
Responder citando

Muchísimas Gracias
Mensaje Dom Abr 20, 2008 11:39 am
situ
Perlero Frecuente
Perlero Frecuente
Registrado: 09 Abr 2007
Mensajes: 146
Ahora una salida PDF Responder citando

Estoy tratando de guardar la salida en un archivo PDF, ya que gracias a ustedes pude hacerlo en formato HTML.
Tengo un problema: solamente me guarda el último resultado:

Perl:
#!/usr/bin/perl

use warnings;
use strict;
use HTTP::Request;
use LWP::UserAgent;

my $host = 'http://localhost';
my $string = "marcos";

#Lista de paginas en un array, así es fácil agregar más páginas
my @paginas = ("legajo.php","legajos.php");

#Abrimos el archivo con la lista de archivos a leer
open my $FILE, '<', 'lista_de_archivos.txt' or die $!;
my @archivos = <$FILE>;
close $FILE;


#Creamos nuestro objeto LWP
my $ua = LWP::UserAgent->new();
$ua->timeout(30);

#Iteramos en cada archivo
for my $archivo(@archivos){
    chomp $archivo;

    #Iteramos en cada pagina
    for my $pagina(@paginas){

        #Armamos el url
        my $url = join "/", $host, $pagina, $archivo;

        #Creamos un nuevo request
        my $req = HTTP::Request->new(GET=>$url);

        my $response = $ua->request($req);

        if ($response->is_success) {
            if( $response->content =~ /$string/ ) {
 #Cerramos el reporte
my $pdf = new PDF::Report(
                          PageSize => 'A4',
                          PageOrientation => 'Portrait'
);


$pdf->newpage(1);
$pdf->setFont('Helvetica-bold');
$pdf->setSize(14);
my ($width, $height) = $pdf->getPageDimensions();

$pdf->centerString(0, $width, $height-40, "Reporte");
$pdf->setFont('Helvetica');
$pdf->setSize(10);

$text2="Host: $host";
$text3="Archivo: lista_de_archivos.txt";
$text4="String: $string";
$text5="Reporte: reporte.pdf";
$text6="$url\n";

$pdf->addParagraph($text1, 30, $height-70, $width-60, 30, 25, 10);
$pdf->addParagraph($text2, 30, $height-80, $width-60);
$pdf->addParagraph($text3, 30, $height-90, $width-60);
$pdf->addParagraph($text4, 30, $height-100, $width-60);
$pdf->addParagraph($text5, 30, $height-110, $width-60);
$pdf->addParagraph($text6, 30, $height-120, $width-70);
open(PDF, "> reporte.pdf") or die "ERROR: No puedo escribir en reporte.pdf: $!\n";
print PDF $pdf->Finish();

            }
        }

    }
}
close(PDF);

exit;


Si alguno me puede ayudar se lo voy agradecer Very Happy

Ultima edición por situ el Dom Abr 20, 2008 2:12 pm, editado 1 vez
Mensaje Dom Abr 20, 2008 12:48 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4222
Ubicación: Valladolid, España
Responder citando

Porque $reporte siempre vale lo mismo... de hecho, el 'strict' te dirá que esa variable no ha sido inicializada...
Mensaje Dom Abr 20, 2008 2:13 pm
situ
Perlero Frecuente
Perlero Frecuente
Registrado: 09 Abr 2007
Mensajes: 146
Responder citando

Ahí lo arreglé. Le puse reporte.pdf directamente, pero ¿cómo puedo hacer para que me guarde todos los resultados y no solamente el último?
Publicar nuevo tema   Responder al tema    Foros de discusión -> Intermedio Todas las horas son GMT - 6 Horas
Ir a página 1, 2  Siguiente
Página 1 de 2



Powered by phpBB © 2001, 2005 phpBB Group