Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    ottenere URI assoluto da URI relativo

    Ciao a tutti, il mio problema è questo:
    supponiamo che in una pagina HTML sia presente l'elemento "BASE" che specifica l'URI di base del documento.
    Come posso ottenere una routine che mi permetta di ottenere l'URI assoluto di una risorsa (documento HTML, immagine, ecc.) se è specificato solo l'URI relativo?
    ESEMPIO:
    URI di base
    <BASE href="http://www.aviary.com/products/intro.html">

    URI relativo


    URI assoluto
    http://www.aviary.com/cages/birds.html

    Ciao

  2. #2
    Ciao,

    leggi la pagina, se in locale tramite open se in remoto tramite i moduli LWP, e estrai il contenuto dei tag che ti interessano tramite delle RE.
    Marco Allegretti
    shishii@tiscalinet.it
    Lang: PERL, PHP, SQL.
    Linux user n° 268623 Fedora Core 10, Fedora Core 6, Debian Sarge on mips

  3. #3
    Ciao shishii, quello che mi suggerisci tu l'ho fatto, infatti ottengo ciò che mi serve, il problema è che ho bisogno solo di URL assoluti, quindi devo fare una cosa simile: una volta estratti gli URL dei vari link devo verificare che inizino con la sequenza di caratteri "http", ciò significa che sono URL assoluti, in caso contrario devo trovare un modo, eventualmente utilizzando l'URL di base contenuto nell'elemento BASE.
    Nell'esempio che ho postato precedentemente l'URL relativo inizia con la sequenza "../", perciò l'eventuale routine deve prendere l'indirizzo di base, tornare indietro di una directory, togliere i due caratteri ".." e accodare l'URL relativo all'URL di base.
    Spero di essermi spiegato

  4. #4
    Ciao,

    Allora io farei così:

    analisi della pagina facendo scorrere il codice allo script e conservando i vari URL dentro ad un array.
    Durante l'analisi fai settare ad 1 un flag di controllo nel caso in cui trovi il tag BASE e conservi l'indirizzo in una variabile.

    dopo i casi sono due:

    1- il flag è a 1 per cui non fai altro che unire il BASE agli altri se non hanno http, e non ti importa se trovi "../" in quanto è ammesso.

    2- il flag è a 0 per cui gli URL assoluti rimangono tali, altrimenti i relativi li completi tramite l'URL di base che hai sia se la pagina la analizzi in locale tramite open o in remoto tramite LWP.
    Marco Allegretti
    shishii@tiscalinet.it
    Lang: PERL, PHP, SQL.
    Linux user n° 268623 Fedora Core 10, Fedora Core 6, Debian Sarge on mips

  5. #5
    grazie shishii, ho risolto in questo modo:
    #!/usr/bin/perl

    use URI::URL;
    use LWP::Simple;
    use HTML::TokeParser;

    getstore("http://www.aviary.com/products/intro.html","/usr/sorgente.html");

    $p = HTML::TokeParser->new(shift||"sorgente.html");

    if (my $token = $p->get_tag("base"))
    {
    $uri_base=$token->[1]{href};
    print "\n\n$uri_base\n\n";
    while (my $token = $p->get_tag("a"))
    {
    my $url = $token->[1]{href} || "-";
    my $text = $p->get_trimmed_text("/a");
    print "\n\n$url\n\n";
    if ($url =~ /^http/)
    {
    $uri_assoluto=$url;
    }
    else
    {
    if ($uri_base =~ m/^(http:\/\/)(.+\/)/ )
    {
    $uri_assoluto=$&.$url;
    }
    }
    }
    }

    Il fatto è che non avevo pensato, o meglio non sapevo che si potesse utilizzare un indirizo del tipo: http://www.aviary.com/products/../pagina.html

    Credevo di dover creare una routine che tenesse in considerazione il fatto che
    - se l'indirizzo inizia con "#" è un frammento contenuto all'interno del documento.
    - se inizia con uno schema è un URI assoluto
    - se inizia con "/" allora è un path assoluto all'interno della stessa autorità del documento di base e gli va applicata la stessa parte di autorità
    - altrimenti, si estrae il path assoluto dell'URI di base, meno l'ultimo elemento esi aggiunge in fondo l'URI relativo
    - vanno semplificate le sequenze "./" (stesso livello di gerarchia) e "../" (livello superiore di gerarchia) che va eliminato assieme all'elemento precedente

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.