lunes, 15 de abril de 2013

Perl: Tratamiento de URLs, partes de la URL


-->
Algunas veces necesitamos analizar la validez de una cadena URL para descargar una página web, o sea necesitamos saber si está bien escrita.

Afortunadamente, en Perl, existe un módulo llamado URI, el cual permite realizar operaciones con las distintas partes de una URL sin tener que recurrir en forma profunda a las expresiones regulares.

Un ejemplo de una cadena URL completa podría ser:
http://user:pass@example.int:4345/hello.php?user=12#parte

Donde sus partes son:
  • Scheme =>http
  • Información de usuario =>user:pass
  • Host => example.int
  • Puerto =>4345
  • Path =>hello.php
  • Query =>user=12
  • Fragment =>parte

Con esta clase, se le dice adiós al procesamiento de los símbolos de la URL (://, /, :, ?, #).
Una vez que verificamos la sintaxis, estaríamos en forma para llamar a la URL y descargar la página web si lo deseamos, algo que podríamos ver en ( -->
http://otroblogdetecnologias.blogspot.com/2013/04/realizar-una-solicitud-una-pagina-web-y.html ).



El siguiente programa, solicita en la línea de comandos una URL y muestra sus partes, seguido a eso, asigna un valor "errado" a la variable que contiene la URL y verifica la sintaxis de la misma.
El ejemplo es un código muy básico, entiendo que podrían existir muchas cosas más que se les puede ocurrir con el procesamiento de una URL.



------------------------------ CORTAR AQUI ------------------------------
#!/usr/bin/perl
use 5.006;
use strict;
use URI;

#recibe como parametro la URL a verificar
my $direccion=$ARGV[$1];

print "URL => $direccion \n";
verURL($direccion);
#a $direccion le asigno un valor que no es valido
#para probar la funcion
$direccion="pagina.com";
if (verificarSintaxisURL($direccion)){
    print " PROGRAMA PRINCIPAL => URL VALIDA\n";
}else{
    print " PROGRAMA PRINCIPAL => URL NO VALIDA\n";
}
###### FIN PRINCIPAL #####

#################################################
#funcion de prueba tomada de O'Reilly Perl & LWP, capitulo 4 URLs
sub verURL{
    my ($direccionE)=@_;
    my $urlE = URI->new($direccionE);
    #ejemplo de cadena URL completa, con todos sus atributos
    # my $urlE = URI->new('http://user:pass@example.int:4345/hello.php?user=12&ninguna=1');
    print "===== PARTES DE LA URL=====\n";
    print "Scheme: ", $urlE->scheme( ), "\n";
    print "Userinfo: ", $urlE->userinfo( ), "\n";
    print "Hostname: ", $urlE->host( ), "\n";
    print "Port: ", $urlE->port( ), "\n";
    print "Path: ", $urlE->path( ), "\n";
    print "Query: ", $urlE->query( ), "\n";

}

##################################################
#verifica que la url contenga http o https
#verifica que tenga la parte del host
#evalua la seccion, si ocurren errores devuelve falso
##################################################
#devuelve 0 cuando es falso y 1 cuando es verdadero
sub verificarSintaxisURL{
    my ($direccionE)=@_;
    my $retorno=1; #comienza con verdadero
    print "===== VERIFICAR SINTAXIS DE LA URL=====\n";
    eval{
        my $urlE = URI->new($direccionE);
        if (defined($urlE->scheme( ))){
            if(($urlE->scheme( )=~ /http/)||($urlE->scheme( )=~ /https/)){
                print "La URL contiene => http|https \n";
            }else{
                $retorno=0;
            }
        }    
        if (defined($urlE->host( ))){
            if($urlE->host( ) eq ""){
                $retorno=0;
            }
            print "La URL tiene Host => \n";        
        }else{
            print "La URL NO TIENE Host => \n";
            $retorno=0;
        }
    };
    if($@){
        print "Se encontro un error durante el tratamiento de la URL, URL NO VALIDA\n";
        $retorno=0;
    }
    $retorno; 
}

###### FIN DEL PROGRAMA ##### 
------------------------------ CORTAR AQUI ------------------------------ 

No hay comentarios:

Publicar un comentario